La modifica del testo di UIButton è programmaticamente rapida


222

Semplice domanda qui Ho un UIButton, currencySelector e voglio cambiare il testo a livello di codice. Ecco cosa ho:

currencySelector.text = "foobar"

Xcode mi dà l'errore "Dichiarazione prevista". Cosa sto sbagliando e come posso modificare il testo del pulsante?

Risposte:


595

In Swift 3, 4, 5:

button.setTitle("Button Title", for: .normal)

Altrimenti:

button.setTitle("Button Title", forState: UIControlState.Normal)

Anche un @IBOutletdeve dichiarare per il button.


32
Puoi ometterti UIControlState. es.forState: .Normal
funroll,

11
Swift3 ora .normalnota il minuscolo
Matthew,

6
Swift3 cambia forStateinfor
Mathew P. Jones il

1
Swift3: self.btnBuy.setTitle ( "Buy", per: UIControlState.normal)
Thiru

5
per swift 4 button.setTitle("Button Title",for: .normal)funziona anche !, grazie
Rakshitha Muranga Rodrigo il

74

Solo un chiarimento per i nuovi programmatori di Swift e iOS . Sotto la riga di codice:

button.setTitle("myTitle", forState: UIControlState.Normal)

si applica solo a IBOutlets, non IBActions.

Quindi, se la tua app utilizza un pulsante come funzione per eseguire del codice, ad esempio la riproduzione di musica e desideri cambiare il titolo da Playa Pausebasato su una variabile di attivazione / disattivazione, devi anche creare un IBOutletpulsante per quel pulsante.

Se si tenta di utilizzare button.setTitlecontro un IBAction, verrà visualizzato un errore. È ovvio una volta che lo sai, ma per i rumori (lo eravamo tutti) questo è un consiglio utile.


1
Sì, stavo per google esattamente questo fino a quando non ho visto la tua risposta. Grazie! +1
Evernoob,

1
È uno schema in IOS che mi ha impiegato un po 'di tempo a scoprire. Esistono attributi di elementi dell'interfaccia utente a cui non hai accesso a meno che non venga creato un IBOutlet. Se mai stai tentando di modificare un attributo di un'interfaccia utente e non riesci ad accedervi, assicurati di avere sia l'IBAction che esegue un codice, sia l'IBOutlet che fornisce l'accesso agli attributi.
Bendrix,

8
Questa risposta non ha senso. L' senderazione sarà il pulsante. Puoi applicare tutto ciò che desideri sender. Non hai bisogno di uno sbocco per farlo.
rmaddy,

2
Né la risposta di Bendix né il suo commento sono corretti. Sono chiaramente sbagliati.
vikingosegundo,

La domanda non menziona il costruttore di interfacce così sbagliato da supporre che sia così.
Edward,

13

Swift 5:

    let controlStates: Array<UIControl.State> = [.normal, .highlighted, .disabled, .selected, .focused, .application, .reserved]
    for controlState in controlStates {
        button.setTitle(NSLocalizedString("Title", comment: ""), for: controlState)
    }

1
Ho dovuto usare UIControl.State. Disse che UIControlState era deprecato
HokiEJP il

9

Swift 3:

Imposta titolo pulsante:

//for normal state:
my_btn.setTitle("Button Title", for: .normal)

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)

9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)

6

Cambiare titolo quando attribuito è un po 'diverso:

Ho appena riscontrato un problema: se hai un UIButton con un titolo attribuito, devi usare:

my_btn.setAttributedTitle(NSAttributedString(string: my_title), for: my_state)

come da Apple SetTitle Doc :

Se si imposta sia un titolo che un titolo attribuito per il pulsante, il pulsante preferisce l'uso del titolo attribuito rispetto a questo.

Avevo un titolo attribuito e ho provato a impostarlo su di esso, senza alcun effetto ...


3

Swift 3

Quando esegui @IBAction:

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("string goes here", for: .normal)
}

Questo imposta il mittente come UIButton (invece di Any) in modo da scegliere btnAction come UIButton


2

rapido 4.2 e versioni successive

utilizzando IBOutlet del pulsante

btnOutlet.setTitle("New Title", for: .normal)

usando l'IBAction del pulsante

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}

0

Swift 3

let button: UIButton = UIButton()
button.frame = CGRect.init(x: view.frame.width/2, y: view.frame.height/2, width: 100, height: 100)
button.setTitle(Title Button, for: .normal)

0

Per impostare un titolo per un pulsante in Xcode usando swift - 04: prima crea un metodo chiamato setTitle con titolo parametro e stato UIController come sotto;

func setTitle(_ title : String?, for state : UIControl.State)   {

}

e richiama questo metodo nel tuo metodo di azione pulsante come;

yourButtonName.setTitle("String", for: .state)
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.