我想将borders
和corner radius
添加到UIButtons
,UITextFields
等
我想我可以扩展UIControl
来添加此功能。
我需要添加一些属性并在awakeFromNib
或'layoutSubviews'中绘制。
如果我是UIControl
的子类,我不能让UIButton
使用该子类。
如果我将UIControl
子类子类化,我需要“重新创建”UIButton,UITextField等。
我可以继承UIButton
,UITextField
并添加此行为,但是我会为每个组件添加一个子类,为它们添加相同的功能,以大量重复的代码结束。
我想我无法改变/改变UIControl
类别中的方法。
有没有办法将这种功能添加到UIControl
及其子类而不重新发明轮子,或者最终会有大量重复的代码?
答案 0 :(得分:1)
HellBoy89所说的似乎是最简单的路线。类别也可以覆盖默认实现,这使得事情变得切实可行。这是一个做你想做的事情的例子,它会自动应用于所有UIControl及其实例化的子类。
@implementation UIControl (Styling)
- (id) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self applyDefaultControlStyle];
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self applyDefaultControlStyle];
}
return self;
}
-(void)applyDefaultControlStyle {
[[self layer] setCornerRadius:8];
[[self layer] setBorderColor: [[UIColor redColor] CGColor]];
[[self layer] setBorderWidth: 2];
}
@end
答案 1 :(得分:0)
您可以使用类别来扩展UIControl。您将无法向UIControl添加属性,但您可以添加方法。 请参阅此问题,它可能会有所帮助:Adding a property to all of my UIControls