2013-05-20 12 views
28

Ho visto un gruppo di domande simili, ma nessuno ha ottenuto la risposta che sto cercando. Quando utilizzo questo codice per creare un UIButton e impostarlo come titleLabel, viene visualizzato UIButton, ma la titleLabel non verrà visualizzata.UIButton titleLabel not displaying

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

Questo codice visualizza il pulsante, ma non il titoloView, è il titolo. Perché può essere? Sto sviluppando per iOS 6 e versioni successive.

NOTA 1: Non sto cercando per un'opzione come questa:

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

Perché devo usare il titleLabel per impostare è di carattere e fontSize.

NOTA 2: Non riesco a creare un UILabel e aggiungerlo come subView del pulsante. Poiché il pulsante si sta animando in seguito.

risposta

66

È sempre necessario specificare ControlState durante l'aggiornamento del titolo del pulsante! Ci sono quattro possibili valori UIButtons:

UIControlStateNormal 
UIControlStateHighlighted 
UIControlStateDisabled 
UIControlStateSelected 

così per esempio:

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

e quindi è possibile impostare impostazioni personalizzate per titleLabel:

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

Si dovrebbe usare 'setTitleColor: forState' per l'impostazione del colore del titolo (piuttosto che chiamare 'setTextColor' sul' titleLabel'). – hverlind

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

È il modo corretto per impostare la stringa del titolo.

titleLabel è utilizzato per impostare il carattere e il colore.

+0

NOTA 1: NON sto cercando questa risposta. Non posso usare questo per il font! – Peter

+1

titleLabel è usato per impostare il font e il colore per la stringa impostata da setTitle: forState: –

+0

Grazie mille, stavo cercando così a lungo: D –

2

Provate ad usare ...

[button setNeedsLayout]; 
[button layoutIfNeeded]; 

Forza il pulsante per aggiornare il layout.