tabbarcontroller中所有导航栏上的持久UIBarButtonItem

时间:2013-06-04 18:55:36

标签: iphone uinavigationcontroller uitabbarcontroller uinavigationbar uibarbuttonitem

好的,我有一个tabbar iPhone应用程序。 tabbarcontroller包含大约5个视图控制器,每个控制器都嵌入在他们自己的导航控制器中,除了1之外我在IB中添加了一个导航栏,以便在整个应用程序中保持一致的外观。在应用程序的每个导航栏上,我想要一个rightBarButtonItem,它将打开相同的模态视图控制器,无论它从何处被选中。与音乐应用程序中的“正在播放”按钮类似,我希望按钮保持在每个导航栏上,无论我在哪个选项卡上或我导航到导航控制器的深度。我该怎么做这样的事情?有没有什么方法我可以简单地将按钮应用到每个导航栏,就像UIAppearance可以将图像应用到应用程序中的每个导航栏一样?提前感谢任何想法。

1 个答案:

答案 0 :(得分:2)

一种简单的方法是创建一个基本视图控制器,所有其他视图控制器都可以从中扩展。

有了这个,您可以在UIBarButtonItem方法中设置viewDidLoad,将其自身附加到导航栏并侦听事件。从那里,可以很容易地观察事件并呈现模态视图控制器或将适当的视图控制器推送到导航堆栈。

我将此方法用于“注销”栏按钮项目,该项目会在点击时显示登录视图控制器,以便用户退出帐户。

唯一不利的是,从基本视图控制器继承的每个视图控制器都将在导航栏中显示注销按钮。如果您需要其他按钮或想要隐藏默认按钮,则需要将其替换为另一个按钮。

这是一种快速简便的方法,并且在需要时也很容易删除,因为您只需更改头文件以反映继承,而不是筛选几个视图控制器来删除按钮的每个实例。它也很容易维护,因为你可以重载任何子类中的按钮目标,以便在事件被触发时执行不同的功能。