扩展UIContol

时间:2015-09-02 12:24:27

标签: objective-c cocoa-touch uikit

我想将borderscorner radius添加到UIButtonsUITextFields

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

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

如果我是UIControl的子类,我不能让UIButton使用该子类。 如果我将UIControl子类子类化,我需要“重新创建”UIButton,UITextField等。 我可以继承UIButtonUITextField并添加此行为,但是我会为每个组件添加一个子类,为它们添加相同的功能,以大量重复的代码结束。

我想我无法改变/改变UIControl类别中的方法。

有没有办法将这种功能添加到UIControl及其子类而不重新发明轮子,或者最终会有大量重复的代码?

2 个答案:

答案 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