3

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

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

除了糟糕的颜色选择外,它的效果很好。

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

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

不幸的是,最后一次调用... appearance] setTintColor:获胜,所有按钮,无论是否为子类,都采用最后指定的颜色。

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

有没有办法UIAppearanceall or nothing更有选择性地使用?

医生说:

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

有什么技巧可以将这个事实转变为这里需要的吗?

4

1 回答 1

2

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

就我自己而言,我一直在使用 UIButton 作为自定义视图来获得我需要的外观。这些可以很容易地依次使用 UIAppearance 覆盖。

于 2013-08-01T10:07:14.320 回答