如何在导航栏上设置公共栏按钮项

时间:2015-01-05 03:21:28

标签: ios objective-c xcode swift

我想设置导航栏右侧的公共栏按钮项,它应该显示在导航控制器管理的所有屏幕上,并且它会调用相同的动作。

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

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

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

如何在导航栏上设置公共栏按钮项?

提前致谢。

2 个答案:

答案 0 :(得分:5)

另一种简单的方法,而不是创建扩展

在根视图控制器中实现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
}

答案 1 :(得分:3)

您可以使用类别来接近它。我们说UIViewController+NavigationBar类别

1.创建一个类别

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

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,导入类别标题并调用[self setNavigationBarItem]方法。