带有底部工具栏的 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 视图时如何隐藏工具栏?

android开发时如何去掉底部的导航栏?

UI整理-----part8--导航控制器(navigationController)

如果使用导航控制器,如何删除某些片段中的底部导航视图和工具栏?

切换导航栏以外的视图时,您可以防止元素移动吗?