如何在iOS的视图之间保留导航工具栏

问题描述

|| 正如这个问题所问的那样,如何在
MainWindow.xib
中设置一些工具栏项目,并在使用
UINavigationController
pushViewController:animated:
显示这些项目。 例如,我的应用程序具有:
MainWindow.xib
,其中包含带有导航栏和工具栏的
UINavigationController
AViewController.xib
,其中仅包含
UITableView
。 在某个时候,我们的用户按下工具栏按钮,相关联的操作将执行:
- (void)someAction {
    [self.navigationController pushViewController:[[AViewController alloc] 
        initWithNibName:nil bundle:nil] 
      animated:YES];
}
推送新视图时,它包含一个空白工具栏,而不是包含与以前相同项目的工具栏。使它们保持相同的首选方法是什么?我觉得我只是缺少一些简单的东西!提前致谢!     

解决方法

        我将让我的一个班级采用
UINavigationControllerDelegate
协议并实现
navigationController:willShowViewController:animated:
方法,
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [viewController setToolbarItems:toolbarItems animated:NO];
}
我在委托类中创建并存储
toolbarItems
。应用程序委托类是可能成为委托的候选对象之一,因为它是最有可能实例化导航控制器的地方。     ,        我最终转向了Deepak的答案,但我也想提供此功能,以防它对某人有所帮助(或者如果人们想提供反馈)。 在上面定义的
showAction
方法中,我将其重构为:
- (void)someAction {
    AViewController *av = [[AViewController alloc]
        initWithNibName:nil bundle:nil];
    [av setToolbarItems:[[self.navigationController toolbar] items]];
    [self.navigationController pushViewController:av animated:YES];
}