问题描述
||
正如这个问题所问的那样,如何在
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];
}