我有一个自定义按钮,它只是一个标准的UIButton,但添加了CAGradientLayer。
在我的自定义按钮中,我定义了两个属性:
@property (nonatomic, strong) UIColor* topColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor* bottomColor UI_APPEARANCE_SELECTOR;
如果设置了这两个值,我的按钮就会用一个很好的线性渐变来绘制自己。效果很好。
我也喜欢在InterfaceBuilder中尽可能多地投入。因此,在其中一些按钮上,在IB的"Identity Inpresector"中,我为这些属性添加了"User Defined Runtime Attributes"。同样,效果很好。
接下来,我想我应该尝试使用UIAppearance代理。我的大多数自定义渐变按钮都有相同的颜色。但也有一些不同之处。所以,我想我应该做的是使用外观代理来设置这个类的默认颜色,然后对于任何不同的按钮,我可以在IntelfaceBuilder中设置它们的值。这失败了。
显然,它首先从我的故事板文件中读取运行时属性,但之后这些值会被外观代理覆盖。我没想到会这样,但确实如此。
关于如何做到这一点,有什么建议吗?或者我应该放弃运行时属性的东西吗?
好的,我已经考虑过了,我想这确实是Appearance代理应该做的。所以,我的解决方案是有两个类"MySpecialButton"one_answers"MyAppearanceButton"。
MyAppearanceButton将是MySpecialButton的一个子类。
"MyAppearanceButton"的外观将由外观代理调用控制。如果我想要一个不受这种控制的按钮,我会制作一个"MySpecialButton",并在用户定义的运行时属性中设置属性。这样就可以了。