带有底部工具栏的 UI 导航控制器在视图切换时丢失 UIBarButtonItem
Posted
技术标签:
【中文标题】带有底部工具栏的 UI 导航控制器在视图切换时丢失 UIBarButtonItem【英文标题】:UINavigation controller with bottom toolbar loses UIBarButtonItems on view switch 【发布时间】:2011-03-07 09:39:33 【问题描述】:我有一个以编程方式创建的导航控制器来处理 UISegmentedControl 的视图之间的切换。 (称为segmentsNavigationController)
导航控制器有一个底部工具栏,其中包含几个以编程方式添加的 UIBarButtonItem。为了处理开关,我有以下代码:
- (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 都会丢失。这是为什么?我做错了吗?
【问题讨论】:
【参考方案1】:经过一番搜索后,我意识到我一直在错误地使用 UINavigationController。
导航控制器的工具栏是内部显示的导航视图的一部分,而不是父视图的一部分。 (我花了一段时间才弄清楚这一点!)我在同一个控制器中创建按钮,我正在创建segmentsNavigationController,而不是在我应该拥有的oneViewController中。
将代码移至 OneViewController 并将工具栏设置为:
[self setToolbarItems: [[NSArray alloc] initWithObjects: button1, button2, nil] animated: NO];
成功了!
【讨论】:
以上是关于带有底部工具栏的 UI 导航控制器在视图切换时丢失 UIBarButtonItem的主要内容,如果未能解决你的问题,请参考以下文章
在没有导航控制器的情况下滑动 Web 视图时如何隐藏工具栏?
UI整理-----part8--导航控制器(navigationController)