使用UIAppearance来自定义UIBarButtonItem子类,但不能自定义主类

时间:2012-12-11 13:14:26

标签: cocoa-touch uibarbuttonitem uiappearance

我正在使用UIAppearance自定义所有UIBarButtonItem,其中包含:

[[UIBarButtonItem appearance] setTintColor:[UIColor purpleColor]];

除了颜色选择不佳外,效果也很好。

现在,我想要一些具有特定风格的按钮。所以我创建了一个新类,我们称之为YellowDoneBarButtonItem 我也想自定义它,所以我添加:

[[YellowDoneBarButtonItem appearance] setTintColor:[UIColor yellowColor]];

不幸的是,对... appearance] setTintColor:的最后一次调用获胜,所有按钮,子类或非子类采用最后指定的颜色。

我无法使用appearanceWhenContainedIn:,因为有时候,我可能在同一个导航栏中有两种不同的按钮样式。

有没有办法比全部或全部更有选择性地使用UIAppearance

医生说:

  

在任何给定的视图层次结构中,最外层的外观代理获胜。特异性(链条的深度)是决胜局。换句话说,appearanceWhenContainedIn:中的包含语句被视为部分排序。给定一个具体的排序(实际的子视图层次结构),UIKit选择从窗口向下读取实际层次结构时第一个唯一匹配的部分排序。

任何把这个事实都归结为需要的技巧?

1 个答案:

答案 0 :(得分:2)

实例化的实际按钮似乎是UINavigationButton,它是UIButton的(私有)子类。这可以解释为什么UIBarButtonItem外观子类是一个全能的。

就我个人而言,我一直使用UIButton作为自定义视图来获得我需要的外观。这些可以使用UIAppearance轻松覆盖。