2015-09-02 2 views
0

Я хочу добавить borders и corner radius к моему UIButtons, UITextFields и т.д.Расширение UIContol

Я думаю, что я мог бы расширить UIControl добавить эту функциональность.

Мне нужно будет добавить некоторые свойства и нарисовать awakeFromNib или 'layoutSubviews'.

Если я подкласс UIControl, я не могу сделать UIButton использовать этот подкласс. Если я подклассифицирую мой подкласс UIControl, мне нужно «воссоздать» UIButton, UITextField и т. Д. Я мог бы подкласса UIButton, UITextField и добавлять это поведение, но тогда у меня будет один подкласс для каждого компонента, чтобы добавить к ним ту же функциональность, заканчивая большим количеством дублированного кода.

Я думаю, что я не могу изменить/изменить методы UIControl в категории.

Есть ли способ добавить этот вид функциональности к UIControl и его подклассам, не изобретая колесо или не получив много дублированного кода?

ответ

1

Что, по мнению HellBoy89, является самым легким путем. Категории также могут переопределять реализацию по умолчанию, что делает вещи практичными. Вот пример того, что вы хотите, и он автоматически применяется ко всем UIControls и их подклассам, созданным.

@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 
0

Вы можете использовать категории для расширения UIControl. Вы не сможете добавлять свойства в UIControl, но можете добавлять методы. Пожалуйста, обратитесь к этому вопросу, может быть полезно: Adding a property to all of my UIControls

Смежные вопросы