iphone - 带有底部工具栏的 UI 导航 Controller 在 View 切换时丢失 UIBarButtonItem

标签 iphone ios uinavigationcontroller uisegmentedcontrol

我有一个以编程方式创建的导航 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/

相关文章:

JavaScript 无法在 mac OS、iphone 中运行

ios - 应用程序尝试以模态方式呈现事件 Controller - 导航 Controller

iphone 导航 Controller : wait for uialertview response before to quit the current view

iPhone:在prepareForSegue方法中防止popover segue?

iPhone:如何将正则表达式转换为日期格式?

iphone - Objective-C run loop停止和重启的方法?

ios - 无法使用 xcode beta 6.3 将 View Controller 推送到导航 Controller

iPhone - 在一张纸上打印多个图像

ios - 如何为滚动到中心的 collectionView 单元格制作分页动画?

ios - 当前点的图像大于其余点的自定义页面控件不起作用