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.