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?

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.


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.


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)
    }

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)

9

Swift 5.0

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

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 ...


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


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)
}

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

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.