我有一个以编程方式创建的导航 Controller 来处理 UISegmentedControl View 之间的切换。 (称为segmentsNavigationController)
导航 Controller 有一个底部工具栏,其中有几个也以编程方式添加的 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];
}
因此,最终当我从一个 View 切换到另一个 View 并返回时,导航 Controller 底部栏中的所有 UIBarButtons 都会丢失。这是为什么?我做错了什么吗?
最佳答案
经过一番搜索后,我意识到我一直在以错误的方式使用 UINavigationController。
导航 Controller 的工具栏是内部显示的导航 View 的一部分,而不是父 View 的一部分。 (我花了一段时间才弄清楚这一点!)我在创建segmentsNavigationController的同一个 Controller 中创建按钮,而不是在我应该拥有的oneViewController内。
将代码移至 OneViewController 并将工具栏设置为:
[self setToolbarItems: [[NSArray alloc] initWithObjects: button1, button2, nil] animated: NO];
成功了!
关于iphone - 带有底部工具栏的 UI 导航 Controller 在 View 切换时丢失 UIBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218033/