如何在导航栏上设置常用栏按钮项
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]
方法。
【讨论】:
嗯,我也不知道为什么要投反对票。这似乎是使用上述评论中提到的类别的示例实现。不过我还没有尝试过这段代码。以上是关于如何在导航栏上设置常用栏按钮项的主要内容,如果未能解决你的问题,请参考以下文章