2011-06-14 56 views
2

由于this question [种类]问,我如何在我的MainWindow.xib中设置一些工具栏项目,并在使用UINavigationControllerpushViewController:animated:时使这些项目存在。如何在iOS视图中保留导航工具栏

例如,我的应用程序有:

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

在某一点上,我们的用户按下工具栏按钮和相关操作执行:

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

当新的观点被推开,它包含了一个空白栏,而不是工具栏具有相同的项目像之前一样。让他们保持一致的首选方法是什么?我觉得我只是想念一些简单的东西!提前致谢!

+0

我已经想通了解决的办法,但我有兴趣,如果别人有投入,所以我会等待回答它。 – Rob 2011-06-15 14:11:04

回答

2

我有我的一个类采用UINavigationControllerDelegate协议并实现navigationController:willShowViewController:animated:方法就是这样,

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

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

+0

非常酷。在我的应用程序委托和上面的函数中添加了''给这个委托代码。普雷斯托。 只有我需要的其他技巧,因为我指定'.xib'中的项目是在'navigationController:willShowViewController:animated'中放置if语句以确定工具栏是否包含项目。当它第一次被调用时,它不会将工具栏清空。 – Rob 2011-06-16 16:18:35

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]; 
}