2013-05-20 2 views
28

Я видел кучу похожих вопросов, но никто не получил ответ, который я ищу. Когда я использую этот код для создания 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, чтобы установить его шрифт и размер шрифта.

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

ответ

66

Вам необходимо указать 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]]; 
+3

Вы должны использовать 'setTitleColor: forState' для установки цвета (а не называть 'setTextColor' на' titleLabel'). – hverlind

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

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

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

+0

ПРИМЕЧАНИЕ 1: Я НЕ ищу этот ответ. Я не могу использовать это для шрифта! – Peter

+1

titleLabel используется для установки шрифта и цвета для строки, которая устанавливается setTitle: forState: –

+0

Большое вам спасибо, я искал это так долго: D –

2

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

[button setNeedsLayout]; 
[button layoutIfNeeded]; 

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

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