【问题标题】:Keep leftBarButtonItems on new UIViewcontroller when pushed推送时将 leftBarButtonItems 保留在新的 UIViewcontroller 上
【发布时间】:2012-07-19 12:41:53
【问题描述】:
我在UINavigationController 中嵌入了一个UIViewController。 rootViewController 现在已经包含一些按钮,例如 leftBarButtonItems。
现在,当我将新的UIViewController 推到UINavigationController 之上时,我希望新的UIViewController 使用Back-Button 扩展现有的leftBarButtonItems。
目前情况如下:当我按下新的UIViewController时,现有的leftBarButtonItems消失,只有Back-Button可见。
【问题讨论】:
标签:
cocoa
ios5
uiviewcontroller
uinavigationcontroller
uinavigationbar
【解决方案1】:
每个 UIViewController 都有自己的“navigationItem”属性,它充当该视图控制器的导航栏表示。当您将按钮添加到特定 UIViewController 的 navigationItem 时,它们的范围仅限于添加它们的视图控制器,并且它们不会持续存在于其他视图控制器中。
基本上,您必须在加载时将按钮添加到每个视图控制器的 navigationItem。您可以通过编写向 UIViewControllers 以外的类添加执行此工作的方法来简化此操作。但是,当您触摸每个按钮时会发生什么可能是特定于视图控制器的,因此您必须考虑如何将触摸动作反馈给相关的视图控制器。也许引入某种 NavigationBarDelegate 协议之类的?
【解决方案2】:
我发现当将同一个视图控制器的多个实例推送到我认为会类似工作的细节视图控制器时,我发现似乎是一种解决此问题的 hacky 方法。在推送新的视图控制器之前,我使用了这个:(浏览器是我的新视图控制器)
self.browser.navigationItem setLeftBarButtonItem:self.detailViewController.navigationItem.leftBarButtonItem animated:YES]; // Sets popover view controller button.
[self.detailViewController.navigationController pushViewController:self.browser animated:YES];
这可能不是一个好方法,但它似乎适用于我的情况。