Modifica del testo del pulsante UIB


102

Quindi sto cercando di aggiornare il testo su un pulsante UIB quando faccio clic su di esso. Sto usando la seguente riga per modificare il testo:

calibrationButton.titleLabel.text = @"Calibration";

Ho verificato che il testo sta cambiando, ma quando eseguo l'app e clicco sul pulsante, cambia in "Calibration" per una frazione di secondo e poi torna al valore predefinito. Qualche idea sul perché potrebbe accadere? C'è una sorta di funzione di aggiornamento che devo chiamare?


1
possibile duplicato del testo TitleLabel
dasblinkenlight

Risposte:


248

Quando disponi le sue viste secondarie, un UIButton imposterà il valore di testo della sua titleLabel usando i propri valori del titolo, in modo che tu possa impostare fino a quattro stringhe differenti per i quattro stati (normale, evidenziato, selezionato, disabilitato).

A causa di questa caratteristica, l'impostazione diretta del testo di titleLabel non persisterà e verrà reimpostata dal pulsante quando esporrà le sue viste secondarie.

Questo è ciò che devi fare per modificare il testo del titolo per lo stato di un pulsante.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];

4
quindi cosa dovrebbe fare button.titleLabel.text = @ "del testo"?
Boris Gafurov

4
@BorisGafurov Se digiti button.titleLabel, vedrai che titleLabel è una proprietà di sola lettura, quindi anche le proprietà di una proprietà di sola lettura sono di sola lettura. L'uso della notazione a punti per modificarli non funzionerà, quindi sono necessari metodi espliciti per modificarli. Questo ha senso almeno per me.
erdekhayser

1
Penso di aver perso circa due ore fino a quando non me ne sono reso conto (cosa che purtroppo penso di aver già saputo!)
race_carr

Grazie per la tua risposta.
dinesharjani

3
@erdekhayser In realtà, le proprietà di sola lettura POSSONO avere proprietà di lettura / scrittura. Uso il tag dell'etichetta del titolo per passare un numero intero a un metodo di azione. Vedi anche il link alla documentazione di AppleAlthough this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:
Aaron


6

a livello di codice puoi impostare il titolo del pulsante come di seguito:

[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];

puoi anche impostare la proprietà del titolo del pulsante dallo storyboard.



1

Per Swift 3.0

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)

1

Per Swift 2.0:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)

1

Se non si desidera impostare il titolo per tutti gli stati, è sufficiente impostarlo per lo stato normale poiché il titolo per gli stati non impostati verrà impostato sul titolo dello stato normale.

btn.setTitle("Some text", for:.normal)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.