与UIAppearance和UIButton子类的麻烦

我有一个自定义button,这只是一个标准的UIButton,但添加了C​​AGradientLayer。

在我的自定义button中,我定义了两个属性:

@property (nonatomic, strong) UIColor* topColor UI_APPEARANCE_SELECTOR; @property (nonatomic, strong) UIColor* bottomColor UI_APPEARANCE_SELECTOR; 

如果这两个值被设置,我的button绘制一个很好的线性渐变。 很好用。

我也喜欢尽可能多的使用InterfaceBuilder。 因此,在这些button的某些button上,在IB的“身份检查器”中,我为这些属性添加了“用户定义的运行属性”。 再一次,伟大的作品。

接下来,我想我会尝试使用UIAppearance代理。 我的大多数自定义渐变button都具有相同的颜色。 但是有一些是不同的。 所以,我想我会做的是使用外观代理的东西来设置这个类的默认颜色,然后对于不同的button,我可以在IntefaceBuilder中设置它们的值。 这失败了。

显然,发生的事情是它首先从故事板文件中读取运行时属性,但之后这些值被外观代理覆盖。 我不希望这样做,但它确实如此。

任何提示如何做到这一点? 或者我应该放弃运行时属性的东西?

好的,我已经考虑过了,我想这就是外观代理应该做的事情。 所以,我的解决scheme是有两个类“MySpecialButton”和“MyAppearanceButton”。

MyAppearanceButton将是MySpecialButton的一个子类。

“MyAppearanceButton”的外观将由外观代理调用来控制。 如果我想要一个不受控制的button,我将创build一个“MySpecialButton”,并在用户定义的运行时属性中设置属性。 这应该做到这一点。