Modification du texte UIButton

102

J'essaye donc de mettre à jour le texte sur un UIButton lorsque je clique dessus. J'utilise la ligne suivante pour modifier le texte:

calibrationButton.titleLabel.text = @"Calibration";

J'ai vérifié que le texte change, mais lorsque j'exécute l'application et que je clique sur le bouton, il passe à "Calibration" pendant une fraction de seconde puis revient à sa valeur par défaut. Des idées pourquoi cela pourrait se produire? Y a-t-il une sorte de fonction de rafraîchissement que je dois appeler?

Julian Coltea
la source
1
duplication possible du texte
dasblinkenlight

Réponses:

248

Lors de la disposition de ses sous-vues, un UIButton définira la valeur de texte de son titleLabel en utilisant ses propres valeurs de titre, de sorte que vous puissiez définir jusqu'à quatre chaînes différentes pour les quatre états (normal, mis en surbrillance, sélectionné, désactivé).

En raison de cette fonctionnalité, la définition directe du texte de titleLabel ne persistera pas et sera réinitialisée par le bouton lorsqu'il disposera ses sous-vues.

C'est ce que vous devez faire pour modifier le texte du titre de l'état d'un bouton.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];
Jesse Gumpo
la source
4
alors qu'est-ce que button.titleLabel.text = @ "du texte" est censé faire alors?
Boris Gafurov
4
@BorisGafurov Si vous tapez button.titleLabel, vous voyez que titleLabel est une propriété en lecture seule, et donc toutes les propriétés d'une propriété en lecture seule sont également en lecture seule. L'utilisation de la notation par points pour les éditer ne fonctionnera pas, et vous avez donc besoin de méthodes explicites pour les éditer. Cela a du sens pour moi au moins.
erdekhayser
1
Je pense que j'ai perdu environ deux heures jusqu'à ce que je réalise cela (ce que je pense malheureusement déjà savoir!)
race_carr
Merci pour votre réponse.
dinesharjani
3
@erdekhayser En fait, les propriétés en lecture seule PEUVENT avoir des propriétés de lecture / écriture. J'utilise la balise de titlelabel pour passer un entier à une méthode d'action. Voir également le lien de documentation d'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

par programme, vous pouvez définir le titre du bouton comme ci-dessous:

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

vous pouvez également définir la propriété du titre du bouton à partir du storyboard.

bhautikmewada191
la source
2

Ce n'est pas très grave, et peut-être évident, mais plusieurs états sont disponibles pour les boutons. Si vous fournissez le «mauvais», vous ne verrez pas le texte changer comme vous le souhaitez.

J'ai remarqué que mon bouton n'affichait pas le texte que j'avais ajouté, en utilisant les méthodes présentées ici. Vérifiez ce lien pour vous assurer que vous fournissez le UIControlState que vous souhaitez.

Quelle est la différence entre UIControlStateHighlighted et UIControlStateSelected?

user3429534
la source
1

Pour 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)
Stephen Chen
la source
1

Pour 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)
Suraj Sonawane
la source
1

Si vous ne souhaitez pas définir le titre pour tous les états, réglez-le simplement pour l'état normal car le titre des états non définis sera par défaut le titre de l'état normal.

btn.setTitle("Some text", for:.normal)
Johan Franzén
la source