2013-05-20 19 views
28

Widziałem kilka podobnych pytań, ale nikt nie otrzymał odpowiedzi, której szukam. Kiedy używam tego kodu, aby utworzyć UIButton i ustawić jego tytułLabel, pojawi się UIButton, ale titleLabel się nie pojawi.UIButton titleLabel nie wyświetla się

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]; 

Ten kod wyświetla przycisk, ale nie titleView, to tytuł. Dlaczego to możliwe? Pracuję nad systemem iOS 6 i nowszym.

UWAGA 1: Nie szukam opcja tak:

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

Ponieważ muszę użyć titleLabel ustawić to czcionki i fontSize.

UWAGA 2: Nie mogę utworzyć UILabel i dodać go jako subView przycisku. Ponieważ przycisk jest później animowany.

Odpowiedz

66

Zawsze należy określić ControlState podczas aktualizacji tytułu przycisku! Istnieją cztery możliwe wartości UIButtons:

UIControlStateNormal 
UIControlStateHighlighted 
UIControlStateDisabled 
UIControlStateSelected 

tak na przykład:

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

a następnie można skonfigurować ustawienia niestandardowe dla titleLabel:

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

Powinieneś użyć 'setTitleColor: forState' do ustawienia koloru tytułu (zamiast wywoływania 'setTextColor' na' titleLabel'). – hverlind

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

Jest prawidłowym sposobem ustawiania ciągu znaków.

titleLabel służy do ustawienia czcionki i koloru.

+0

UWAGA 1: NIE szukam tej odpowiedzi. Nie mogę użyć tego dla czcionki! – Peter

+1

titleLabel służy do ustawienia czcionki i koloru łańcucha, który zostanie ustawiony przez setTitle: forState: –

+0

Dziękuję bardzo, szukałem tego od tak dawna: D –

2

Spróbuj użyć ...

[button setNeedsLayout]; 
[button layoutIfNeeded]; 

Wymusi przycisk, aby zaktualizować układ.

Powiązane problemy