2012-07-20 13 views
34

Mi sembra che questa sia probabilmente una domanda stupida ... ma comunque ho questo strano comportamento del titolo UIButton.UIButton cambia titolo al valore predefinito

Il pulsante è impostato e connesso sia a un'azione sia a una proprietà in IB (l'azione è startButtonPushed e la proprietà è startButton). All'interno del controller della vista che ho l'azione impostata in questo modo:

bool buttonStateStop; 

- (IBAction)startPushed:(id)sender 
{ 
    if (buttonStateStop) 
    { 
     [appD.locationManager stopSavingLocations]; 
     startButton.titleLabel.text = @"Start"; 
     buttonStateStop = NO; 
    } 
    else 
    { 
     [appD.locationManager startSavingLocations]; 
     startButton.titleLabel.text = @"Stop"; 
     buttonStateStop = YES;   
    } 
} 

Originariamente ho avuto il titolo di default in IB impostato su "Start", ma ogni volta che ho premuto il tasto cambierebbe a "Stop" per una frazione di un secondo e poi di nuovo. Ho passato un po 'di tempo a cercare di capire perché il titolo continuasse a essere impostato su "Start". Alla fine ho cambiato il titolo IB in "xxxxxx" e ho capito che non importa cosa, il titolo IB viene riaffermato immediatamente dopo la modifica del titolo del pulsante.

Quindi la domanda è: perché IB continua a cambiare il titolo del pulsante di nuovo su predefinito? Non ho mai incontrato questo comportamento prima. E (ovviamente) come posso aggiustarlo?

Ulteriori informazioni: gli unici riferimenti al pulsante sono @property, @synthesize e le istruzioni nel codice sopra. La vista è all'interno di un controller di navigazione.

risposta

65

è necessario utilizzare setTitle:forState: metodo invece di impostare la proprietà titleLabel.text:

[startButton setTitle:@"Start" forState:UIControlStateNormal]; 
// Normal and highlighted titles do not need to be the same 
[startButton setTitle:@"Start!" forState:UIControlStateHighlighted]; 

cosa succede ora è che si imposta il documento nella etichetta che rappresenta la visualizzazione dello stato attuale, ma una volta che i cambiamenti di stato da spinto a normale, il pulsante reimposta l'etichetta sul titolo per il nuovo stato (che è il testo che hai impostato in IB).

+0

Hai ragione, questo era il mio problema. Comportamento molto strano, dal momento che ho già fatto la stessa identica cosa senza problemi. – Dustin

+0

È strano come "a volte funzioni!" il problema è che nella doco menzionano cambiare lo ** styling ** (etc) del testo usando .titleLabel. Che seccatura! – Fattie

5

La versione rapida di questo è

startButton.setTitle("Start", forState: UIControlState.Normal) 
+0

ora 'startButton.setTitle (" Start ", per: .normal)' finché non lo cambiano di nuovo – CupawnTae

Problemi correlati