Добавьте категорию в UITextView и переопределите ее функцию инициализации, пока UITextView находится в xib

Я не могу перехватить функцию инициализации, которая вызывается, когда она создается внутри файла xib.

Я хочу добавить границу к нему, когда он будет создан, чтобы мне не нужно было добавлять его вручную.

.h:

#import <UIKit/UIKit.h>

@interface UITextView (FITAddBorderline)
- (id) init;
- (id) initWithFrame:(CGRect)frame;
@end

.m:

#import "UITextView+FITAddBorderline.h"

@implementation UITextView (FITAddBorderline)

- (id) init
{
    self = [super init];
    if (self) {
        [self addBorderline];
    }
    return self;
}

- (id) initWithFrame:(CGRect)frame {

    self = [super init];
    if (self) {
        self.frame = frame;
        [self addBorderline];
    }
    return self;
}

- (void) addBorderline {

    //To make the border look very close to a UITextField
    [self.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]];
    [self.layer setBorderWidth:2.0];

    //The rounded corner part, where you specify your view's corner radius:
    self.layer.cornerRadius = 5;
    self.clipsToBounds = YES;
}

@end

person Bryan P    schedule 04.06.2014    source источник


Ответы (2)


Представления, поступающие из NIB, инициализируются с помощью initWithCoder:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];

    if (self)
    {
        [self addBorderline];
    }

    return self;
}

В качестве примечания я бы рекомендовал изменить то, что вы делаете, и использовать подкласс вместо категории. У вас могут возникнуть проблемы с переопределением методов в категории. Дополнительную информацию см. здесь.

person Dima    schedule 04.06.2014

Вам просто нужно реализовать метод awakeFromNib:

-(void)awakeFromNib

{
    [super awakeFromNib];
    [self addBorderline];
}
person Vinod Vishwanath    schedule 04.06.2014