UIButton Subclass - Настройка свойств? - PullRequest
8 голосов
/ 04 октября 2011

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

шрифт не установлен.Ни цвета, ни цвета фона.В чем дело?Вот мой кодЯ надеюсь, что вы можете помочь:)

- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {

    [[self titleLabel] setFont:[UIFont fontWithName:@"ZegoeUI" size:18]];
    [self setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
    [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    if(self.state == UIControlStateHighlighted) {
        [self setBackgroundColor:[UIColor whiteColor]];
    }
    else {
        [self setBackgroundColor:[UIColor blackColor]];
    }
}
return self;
}





// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {

             [self.layer setMasksToBounds:YES];
[self.layer setBorderWidth:2.0];
[self.layer setCornerRadius:0.0];
[self.layer setBorderColor:[[UIColor colorWithWhite:1.0 alpha:1.0] CGColor]];
}

Я не думаю, что я делаю что-то не так.У меня есть этот класс, я связал кнопки в IB и установил тип класса ...

Спасибо,

BenBen

Ответы [ 3 ]

17 голосов
/ 04 октября 2011

Если вы создали пользовательские кнопки подкласса в IB, initWithFrame: вызываться не будет. Вам необходимо переопределить initWithCoder: или, предпочтительно, создать отдельный метод настройки, который вызывается как из initWithFrame:, так и initWithCoder:.

Для первого случая:

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

    [[self titleLabel] setFont:[UIFont fontWithName:@"ZegoeUI" size:18]];
    [self setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
    [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    if(self.state == UIControlStateHighlighted) {
        [self setBackgroundColor:[UIColor whiteColor]];
    }
    else {
        [self setBackgroundColor:[UIColor blackColor]];
    }
}
return self;
}
1 голос
/ 11 декабря 2013

Вот как я это делаю (без ИБ):

+ (instancetype)customButtonWithCustomArgument:(id)customValue {
    XYZCustomButtom *customButton = [super buttonWithType:UIButtonTypeSystem];
    customButton.customProperty = customValue;
    [customButton customFunctionality];
    return customButton;
}

Работает также с другими типами, UIButtonTypeSystem это просто пример.

0 голосов
/ 04 октября 2011

UIButton - это кластер классов. Вы действительно не должны создавать подклассы, так как классы, которые он представляет, являются частными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...