如何在导航栏上设置常用栏按钮项

Posted

技术标签:

【中文标题】如何在导航栏上设置常用栏按钮项【英文标题】:How to set common Bar Button Item on Navigation Bar 【发布时间】:2015-01-05 03:21:27 【问题描述】:

我想在 Navigation Bar 右侧设置公共 Bar Button Item,它应该显示在 Navigation Controller 管理的所有屏幕上并调用相同的操作。

例如,在Master Detail Application模板中,导航栏右侧有“addButton”,我想在DetailViewController上也显示它(因为缺少动作,它不会起作用)。

我创建了 UINavigationController 的子类,我可以在其中更改导航栏颜色之类的内容,但无法设置栏按钮项。我可以在每个屏幕的 ViewController 中设置条形按钮项,这样我就必须为每个屏幕复制操作。

我也尝试过创建 UINavigationBar 的子类,但我不知道是否可以在其上添加 Bar Button Item。

如何在导航栏上设置常用的Bar Button Item?

提前致谢。

【问题讨论】:

为什么不能将 UIViewController 子类化为预设 barbuttonitems,然后在任何地方使用子类? 感谢您的评论。因为不仅有 UIViewControllers,还有 UITableViewControllers。那么我应该创建 UIViewController 和 UITableViewController 的子类吗?我不知道这对于常见的 Bar Button Item 是否是一个好习惯。 这似乎是更简单的解决方案。你只需要创建两个自定义类对吗? 如果你不想子类化,那么你可以使用 UIViewController 上的一个类别(Swift 中的扩展),它会添加一个方法来创建按钮。您仍然需要在每个控制器中添加代码来调用此方法,但它只会是一行。 @rakeshbs 是的,这次我只创建了两个自定义类。所以我不介意创建它们。 【参考方案1】:

另一种简单的方法来代替创建扩展

在根视图控制器中实现UINavigationControllerDelegate

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) 
    let backBarButton = UIBarButtonItem.init(title: "HINIBO", style: .Plain, target: self, action: Selector("menuButtonAction:"))
    viewController.navigationItem.rightBarButtonItem = backBarButton

【讨论】:

【参考方案2】:

您可以使用类别来处理它。假设UIViewController+NavigationBar 类别

1.创建类别

2.在.h文件中添加一个方法,-(void)setNavigationBarItem方法(本例)。

3.实现.m文件中的方法来处理设置的Bar Button Items的东西。

- (void)setNavigationBarItem

  UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(something)];
  self.navigationItem.rightBarButtonItem = searchItem;

4.在哪个viewController中需要NavigationBarItem,导入category header并调用[self setNavigationBarItem]方法。

【讨论】:

嗯,我也不知道为什么要投反对票。这似乎是使用上述评论中提到的类别的示例实现。不过我还没有尝试过这段代码。

以上是关于如何在导航栏上设置常用栏按钮项的主要内容,如果未能解决你的问题,请参考以下文章

导航栏上没有后退按钮

如何在导航栏上为单个视图上的不同按钮设置标题?

如何在 XCUITest 中访问导航栏上的右键项目按钮?

使用左栏按钮在导航栏上滑动返回手势

我不能在故事板中同时将标题和图像设置为导航栏上的右侧栏项吗?

如何在操作栏上添加下拉项