带底部工具栏的UINavigation控制器在视图开关上丢失UIBarButtonItems

问题描述:

我有一个编程创建的导航控制器来处理UISegmentedControl视图之间的切换。 (称为段导航控制器)带底部工具栏的UINavigation控制器在视图开关上丢失UIBarButtonItems

导航控制器有一个底部工具栏,并带有一些UIBarButtonItems,这些UIBarButtonItems也是以编程方式添加的。为了处理我有下面的代码段开关:

- (void)indexDidChangeForSegmentedControl:(UISegmentedControl *) aSegmentedControl { 
NSUInteger index = aSegmentedControl.selectedSegmentIndex; 

if(index == 0) { 
    OneViewController *oneViewController = nil; 

    if((oneViewController = [self.viewControllers objectForKey:@"one"]) == nil) { 
     oneViewController = [[OneViewController alloc] init]; 
     [self.viewControllers setObject:oneViewController forKey:@"one"]; 
     [oneViewController release]; 
    } 
    NSArray *theViewControllers = [NSArray arrayWithObject:oneViewController]; 
    [self.segmentsNavigationController setViewControllers:theViewControllers animated:YES]; 
} 
else if(index == 1) { 
    TwoViewController *twoViewController = nil; 

    if((twoViewController = [self.viewControllers objectForKey:@"two"]) == nil) { 
     twoViewController = [[RelatedArticlesViewController alloc] init]; 
     [self.viewControllers setObject:twoViewController forKey:@"two"]; 
     twoViewController.hidesBottomBarWhenPushed = YES; 

     [twoViewController release]; 
    } 

    NSArray *theViewControllers = [NSArray arrayWithObject:twoViewController];  
    [self.segmentsNavigationController setViewControllers:theViewControllers animated:YES];  
} 

}

所以,最终,当我从一个视图切换到另一个和背部都是我UIBarButtons在导航控制器的底部栏迷路了。这是为什么?难道我做错了什么?

那么经过一番搜索后,我意识到我一直在用错误的方式使用UINavigationController。

导航控制器的工具栏是内部显示的导航视图的一部分,而不是父级的导航视图的一部分。 (我花了一段时间才弄清楚了这一点!)我在同一个控制器中创建了按钮,我正在创建segmentsNavigationController,而不是在我应该拥有的oneViewController中。

移动代码OneViewController和设置工具栏为:

[self setToolbarItems: [[NSArray alloc] initWithObjects: button1, button2, nil] animated: NO]; 

的伎俩!