Changer le texte de UIButton par programmation rapide

222

Question simple ici. J'ai un UIButton, currencySelector et je souhaite modifier le texte par programme. Voici ce que j'ai:

currencySelector.text = "foobar"

Xcode me donne l'erreur "Expected Declaration". Qu'est-ce que je fais mal et comment puis-je modifier le texte du bouton?

fusée101
la source

Réponses:

595

Dans Swift 3, 4, 5:

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

Autrement:

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

Aussi un @IBOutletdoit déclarer pour le button.

Gal Marom
la source
32
Vous pouvez omettre UIControlState. par exempleforState: .Normal
funroll
11
Swift3 .normalnote désormais les minuscules
Matthew
6
Changement de Swift3 forStateàfor
Mathew P. Jones
1
Swift3: self.btnBuy.setTitle ("Acheter", pour: UIControlState.normal)
jeudi
5
pour swift 4 button.setTitle("Button Title",for: .normal)fonctionne aussi !, merci
Rakshitha Muranga Rodrigo
74

Juste une clarification pour ceux qui découvrent la programmation Swift et iOS . Sous la ligne de code:

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

ne s'applique qu'à IBOutlets, non IBActions.

Donc, si votre application utilise un bouton comme fonction pour exécuter du code, disons jouer de la musique, et que vous souhaitez changer le titre de Playen Pausefonction d'une variable à bascule, vous devez également créer un IBOutletpour ce bouton.

Si vous essayez d'utiliser button.setTitlecontre un, IBActionvous obtiendrez une erreur. C'est évident une fois que vous le savez, mais pour les noobs (nous étions tous) c'est un conseil utile.

Bendrix
la source
1
Oui, j'étais sur le point de google exactement jusqu'à ce que je voie votre réponse. Merci! +1
Evernoob
1
C'est un modèle dans IOS qui m'a pris un certain temps à découvrir. Il existe des attributs d'éléments d'interface utilisateur auxquels vous n'avez pas accès à moins qu'un IBOutlet soit créé. Si jamais vous essayez de modifier un attribut d'une interface utilisateur et que vous ne pouvez pas y accéder, assurez-vous que vous disposez à la fois de l'IBAction qui exécute du code et de l'IBOutlet qui donne accès aux attributs.
Bendrix
8
Cette réponse n'a aucun sens. Le senderde l'action sera le bouton. Vous pouvez appliquer tout ce que vous souhaitez au sender. Vous n'avez pas besoin d'un point de vente pour ce faire.
rmaddy
2
Ni la réponse de Bendix ni son commentaire ne sont corrects. Ils ont tout simplement tort.
vikingosegundo
La question ne mentionne pas le constructeur d'interface si mal à supposer que c'est le cas.
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)
    }
Dmitry
la source
1
J'ai dû utiliser UIControl.State. Il a déclaré que UIControlState était obsolète
HokiEJP
9

Swift 3:

Définir le titre du bouton:

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

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)
Bhavin Ramani
la source
9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)
Tyler Rutt
la source
6

Changer de titre lors de l'attribution est un peu différent:

Je viens de rencontrer un problème: si vous avez un UIButton avec un titre attribué, vous devez utiliser:

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

comme, selon Apple SetTitle Doc :

Si vous définissez à la fois un titre et un titre attribué pour le bouton, le bouton préfère l'utilisation du titre attribué à celui-ci.

J'avais un titre attribué et j'ai essayé de lui attribuer un titre, sans effet ...

Christian Navelot
la source
3

Swift 3

Lorsque vous effectuez @IBAction:

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

Cela définit l'expéditeur comme UIButton (au lieu de Any) afin qu'il cible le btnAction comme UIButton

gustavoanalytics
la source
2

rapide 4.2 et supérieur

en utilisant l'IBOutlet du bouton

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

en utilisant l'IBAction du bouton

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}
midhun p
la source
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)
Giang
la source
0

Pour définir un titre pour un bouton dans Xcode à l'aide de swift-04: créez d'abord une méthode appelée setTitle avec le titre du paramètre et l'état UIController comme ci-dessous;

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

}

et rappelez cette méthode dans votre méthode d'action de bouton comme;

yourButtonName.setTitle("String", for: .state)
Jasani Hardik
la source