UIAppearance和UIButton子类化的问题

时间:2013-08-07 15:28:45

标签: ios interface-builder uiappearance

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

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

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

如果设置了这两个值,我的按钮会使用一个漂亮的线性渐变来绘制自己。效果很好。

我也想尽可能多地使用InterfaceBuilder。因此,在其中一些按钮上,在IB的“Identity Inpsector”中,我为这些属性添加了“用户定义的运行时属性”。再次,效果很好。

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

显然,正在发生的事情是它首先从我的storyboard文件中读取运行时属性,但之后这些值会被外观代理覆盖。我不希望这种方式起作用,但确实如此。

有关如何完成此任务的任何提示?或者我应该放弃运行时属性?

1 个答案:

答案 0 :(得分:0)

好的,我已经考虑过这个了,我猜这真的是Appearance代理应该做的事情。所以,我的解决方案是有两个类“MySpecialButton”和“MyAppearanceButton”。

MyAppearanceButton将是MySpecialButton的子类。

“MyAppearanceButton”的外观将由外观代理调用控制。如果我想要一个不受这种方式控制的按钮,我将创建一个“MySpecialButton”并在用户定义的运行时属性中设置属性。应该这样做。