如何跨iOS视图保留导航工具栏

时间:2011-06-14 21:26:45

标签: iphone objective-c ios

this question [有点]询问时,如何在我的MainWindow.xib中设置一些工具栏项,并在我使用UINavigationController pushViewController:animated:时显示这些项目。< / p>

例如,我的应用程序有:

  • MainWindow.xib,其中包含带导航栏和工具栏的UINavigationController
  • AViewController.xib,其中只包含UITableView

在某些时候,我们的用户按下工具栏按钮,相关的操作执行:

- (void)someAction {
    [self.navigationController pushViewController:[[AViewController alloc] 
        initWithNibName:nil bundle:nil] 
      animated:YES];
}

当推送新视图时,它包含一个空白工具栏,而不是包含与之前相同项目的工具栏。保持它们相同的首选方法是什么?我觉得我只是错过了一些简单的东西!提前谢谢!

2 个答案:

答案 0 :(得分:2)

我希望其中一个类采用UINavigationControllerDelegate协议并实现navigationController:willShowViewController:animated:这样的方法,

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [viewController setToolbarItems:toolbarItems animated:NO];
}

我在委托类中创建并存储toolbarItems。作为委托的可能候选者之一是应用程序委托类,因为它是最可能实例化导航控制器的地方。

答案 1 :(得分:0)

我最终切换到了Deepak的答案,但我也认为如果有人帮助(或者如果有人想提供反馈),我会提供这个。

在我上面定义的showAction方法中,我重构了它:

- (void)someAction {
    AViewController *av = [[AViewController alloc]
        initWithNibName:nil bundle:nil];
    [av setToolbarItems:[[self.navigationController toolbar] items]];
    [self.navigationController pushViewController:av animated:YES];
}