为所有导航栏 (UINavigationBar) iOS 5.1+ 设置按钮和外观

Posted

技术标签:

【中文标题】为所有导航栏 (UINavigationBar) iOS 5.1+ 设置按钮和外观【英文标题】:Set a button and appearance for all Navigation Bars (UINavigationBar) iOS 5.1+ 【发布时间】:2013-01-15 23:49:05 【问题描述】:

我试图设置一个按钮,以便它出现在每个具有导航栏的视图上。使用 AppDelegate 上的外观代理设置所有视图的外观不是问题

[[UINavigationBar appearance] setTintColor:[UIColors grayColor]];

我试图继承 UINavigationController,然后在情节提要上设置导航控制器。在viewDidLoad 方法上我试过这个:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"right"
                                                                         style:UIBarButtonItemStyleBordered target:self action:nil];

但是按钮没有显示出来。

如果我这样做:

self.navigationBar.topItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"right"
                                                                         style:UIBarButtonItemStyleBordered target:self action:nil];

按钮会显示,但在您进入下一个屏幕后会消失。

我正在尝试这样做,因此我不必在每个视图控制器的所有 viewDidLoad 方法上设置左右按钮。是否可以使用 UINavigationController 的子类来设置导航栏的属性?

【问题讨论】:

【参考方案1】:

Apple 告诉我们不要继承 UINavigationController:

这个类不用于子类化。相反,在您希望应用程序的用户界面反映内容的分层性质的情况下,您可以按原样使用它的实例。

这来自文档的 XCode 版本。在线版本loosens up a bit,将建议替换为:

此类通常按原样使用,但在 ios 6 及更高版本中可能是子类。

如何使用修改后的 viewDidLoad 创建 UIViewController 的自定义子类并将所有自定义 VC 建立在此基础上?

【讨论】:

你是对的,继承 UIViewController 将是最好的选择。谢谢!

以上是关于为所有导航栏 (UINavigationBar) iOS 5.1+ 设置按钮和外观的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar 未显示,尝试了多个修复

如何设置自定义导航栏按钮颜色

如何在 uinavigationbar 中的特定位置添加项目?

如何防止在横向上自动调整 UINavigationBar 的大小

如何将透明的“大标题”UINavigationBar 重置为默认外观设置?

IOS 去掉导航栏(UINavigationBar)下方的横线