扩展 UIContol

Extending UIContol

我想将 borderscorner radius 添加到我的 UIButtonsUITextFields

我想我可以扩展 UIControl 来添加这个功能。

我需要添加一些属性并在 awakeFromNib 或 'layoutSubviews' 中绘制。

如果我继承 UIControl,我不能让 UIButton 使用那个子类。 如果我继承我的 UIControl 子类,我需要 "recreate" UIButton、UITextField 等。 我可以对 UIButtonUITextField 进行子类化并添加此行为,但随后我将为每个组件创建一个子类以向它们添加相同的功能,以大量重复代码结束。

我想我不能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