使用多个导航栏视图自定义 UIBarButtonItem 外观

Posted

技术标签:

【中文标题】使用多个导航栏视图自定义 UIBarButtonItem 外观【英文标题】:Customizing UIBarButtonItem apperance with multiple UINavigationBar views 【发布时间】:2014-10-23 21:55:27 【问题描述】:

我正在使用这个:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
 setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                         color ,NSForegroundColorAttributeName,
                         FONT(FONT_REGULAR, 15.0f), NSFontAttributeName,
                         nil] forState:UIControlStateNormal];

viewWillAppear: 方法上为UINavigationController 中的按钮设置颜色。 我的应用程序有 5 个主要视图,每个视图都有 UINavigationController 分组在 UITabBar 下。

问题是当我在UITabBar 视图之间切换时,它会发疯,它总是将最后初始化的视图颜色应用于所有其他视图。当我使用适当的参数进行更改时,我三重检查代码正在运行,它对现有按钮没有影响。

有没有其他方法可以为不同的UINavigationControllers 分别设置颜色?

【问题讨论】:

【参考方案1】:

不要使用appearanceWhenContainedIn: 方法,它会改变一个类的所有实例的外观。在你的情况下,这个类是UIBarButtonItem。而且您一次又一次地在viewWillAppear: 方法上执行此操作,这会导致更改所有UIBarButtonItem 对象的颜色。

这个问题回答了你的问题:

ios 6 appearance when contained in multiple classes

编辑:

作为一种解决方案,您可以将tintColor 属性用于精确的UIBarButtonItem 对象。

myBarButtonItem.tintColor = [UIColor blueColor];

【讨论】:

但我想一次又一次地改变它,只是为了不同标签上的不同颜色。我该如何改变呢? 对精确的 UIBarButtonItem 对象使用 tintColor 属性

以上是关于使用多个导航栏视图自定义 UIBarButtonItem 外观的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 中使用自定义导航栏制作三个分页视图

将多个自定义栏按钮添加到自定义导航栏

如何使用多个导航器

当导航栏是超级视图视图时,如何在导航栏后面放置视图?

自定义视图控制器展示导致导航栏弹跳

自定义大小的表格视图仍然使用导航栏的偏移量