扩展 UIContol
Extending UIContol
我想将 borders
和 corner radius
添加到我的 UIButtons
、UITextFields
等
我想我可以扩展 UIControl
来添加这个功能。
我需要添加一些属性并在 awakeFromNib
或 'layoutSubviews' 中绘制。
如果我继承 UIControl
,我不能让 UIButton
使用那个子类。
如果我继承我的 UIControl
子类,我需要 "recreate" UIButton、UITextField 等。
我可以对 UIButton
、UITextField
进行子类化并添加此行为,但随后我将为每个组件创建一个子类以向它们添加相同的功能,以大量重复代码结束。
我想我不能change/alter UIControl
的方法在一个类别中。
有没有一种方法可以将这种功能添加到 UIControl
及其子类中,而无需重新发明轮子,或者以大量重复代码告终?
您可以使用类别来扩展 UIControl。您将无法向 UIControl 添加属性,但可以添加方法。
请参考这个问题,它可能会有所帮助:Adding a property to all of my UIControls
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
我想将 borders
和 corner radius
添加到我的 UIButtons
、UITextFields
等
我想我可以扩展 UIControl
来添加这个功能。
我需要添加一些属性并在 awakeFromNib
或 'layoutSubviews' 中绘制。
如果我继承 UIControl
,我不能让 UIButton
使用那个子类。
如果我继承我的 UIControl
子类,我需要 "recreate" UIButton、UITextField 等。
我可以对 UIButton
、UITextField
进行子类化并添加此行为,但随后我将为每个组件创建一个子类以向它们添加相同的功能,以大量重复代码结束。
我想我不能change/alter UIControl
的方法在一个类别中。
有没有一种方法可以将这种功能添加到 UIControl
及其子类中,而无需重新发明轮子,或者以大量重复代码告终?
您可以使用类别来扩展 UIControl。您将无法向 UIControl 添加属性,但可以添加方法。 请参考这个问题,它可能会有所帮助:Adding a property to all of my UIControls
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