如何在 UINavigationController 中为所有视图控制器添加 UiBarButtonItem

Posted

技术标签:

【中文标题】如何在 UINavigationController 中为所有视图控制器添加 UiBarButtonItem【英文标题】:How to add a UiBarButtonItem in UINavigationController for all viewControllers 【发布时间】:2011-01-04 15:10:54 【问题描述】:

我想知道是否可以将按钮直接添加到navigation controller,或者我必须将所有viewController 中的按钮添加到navigation Controller

示例:我有 3 个UIViewController(VC1、VC2 和 VC3),我可以将这些元素推送到 NavigationController (NC) 中。如果我需要添加一个按钮作为 VC1 的右侧导航项,我可以写在 VC1 的 viewDidLoad 中:

UIBarButtonItem *settingsBtn = [[UIBarButtonItem alloc]initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(settings)];
self.navigationItem.rightBarButtonItem = settingsBtn;

如果我也需要 NC 上的此按钮用于 VC2 和 VC3,我必须在 VC2 和 VC3 中添加此代码,并在 VC1、VC2 和 VC3 中指定方法“设置”

是否可以以共享方式添加此按钮?以及如何将设置方法定义为共享方法?

【问题讨论】:

【参考方案1】:

做到这一点的一种方法是拥有一个您的UIViewControllers 派生自的父类。在父类中,您可以将按钮设置为viewDidLoad。在您的儿童课程中,您可以在 viewDidLoad 方法中执行 [super viewDidLoad];

希望这会有所帮助!

【讨论】:

是的,这是一个快速且面向对象的解决方案 :) 我会为您带来 900 声望点:P 再次感谢 donkim! 很高兴为您提供帮助!我从这个社区学到了很多东西,很高兴能回馈社会。 :)【参考方案2】:

成为 UINavigationController 的代表。

- (void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated 
UIBarButtonItem *settingsBtn = [[UIBarButtonItem alloc]initWithTitle:@"Settings"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(settings)];
viewController.navigationItem.rightBarButtonItem = settingsBtn;

【讨论】:

以上是关于如何在 UINavigationController 中为所有视图控制器添加 UiBarButtonItem的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 中设置时图像不显示

将 managedObjectContext 发送到 viewController 崩溃

ID:[...] 的 NSManagedObject 已失效

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?

为啥我似乎必须在 iOS 应用程序委托中键入 window.rootViewController?

UINavigationController - 何时释放推送的视图控制器等