Подтвердить что ты не робот

UIButton titleLabel не отображается

Я видел кучу подобных вопросов, но никто не получил ответ, который я ищу. Когда я использую этот код для создания UIButton и устанавливаю его titleLabel, появляется UIButton, но titleLabel не будет отображаться.

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
button.titleLabel.text = @"Title";
button.titleLabel.font = [UIFont fontWithName:@"System-Bold" size:25.0f];
[self.view addSubview:button];

Этот код отображает кнопку, но не titleView, ее название. Почему это может быть? Я разрабатываю для iOS 6 и выше.

ПРИМЕЧАНИЕ 1: Я не ищу такой вариант:

[button setTitle:@"Title" forState:UIControlStateNormal];

Потому что я должен использовать titleLabel, чтобы установить его font и fontSize.

ПРИМЕЧАНИЕ 2. Я не могу создать UILabel и добавить его в качестве подвидной кнопки. Так как кнопка позже анимация.

4b9b3361

Ответ 1

Вы всегда должны указывать ControlState при обновлении названия кнопки! Для UIButtons существует четыре возможных значения:

UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateSelected

так, например:

[button setTitle:@"Title" forState:UIControlStateNormal];

а затем вы можете установить пользовательские настройки для titleLabel:

[button.titleLabel setFont:[UIFont fontWithName:@"Zapfino" size:20.0]];
[button.titleLabel setTextColor:[UIColor blueColor]];

Ответ 2

[button setTitle:@"Title" forState:UIControlStateNormal];

Правильный способ установки строки заголовка.

titleLabel используется для установки шрифта и цвета.

Ответ 3

Попробуйте использовать...

[button setNeedsLayout];
[button layoutIfNeeded];

Это заставит кнопку обновлять макет.