带底部工具栏的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];
的伎俩!