J'ai un UIButton
, qui, lorsqu'il est pressé, fait apparaître une nouvelle vue où l'utilisateur peut modifier certains paramètres. Lorsque la vue est rejetée, j'aimerais mettre à jour le titre / texte du UIButton
pour refléter le nouvel état. J'appelle:
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
Mais cela ne semble jamais changer par rapport au texte / titre original tel que spécifié dans IB.
ios
iphone
uibutton
uicontrolstate
George Armhold
la source
la source
Réponses:
Le bouton est-il spécifié en tant qu'IBOutlet dans votre classe de contrôleur de vue et est-il correctement connecté en tant que sortie dans Interface Builder (faites glisser le curseur de la nouvelle sortie de référencement vers le propriétaire du fichier et sélectionnez votre objet UIButton)? C'est généralement le problème que j'ai lorsque je vois ces symptômes.
Modifier: Bien que ce ne soit pas le cas ici, quelque chose comme cela peut également se produire si vous définissez un titre attribué au bouton, puis que vous essayez de changer le titre et non le titre attribué.
la source
J'ai résolu le problème en définissant simplement le paramètre de titre pour UIControlStateNormal, et cela fonctionne automatiquement sur les autres états. Le problème semble être lorsque vous définissez un autre UIControlState.
la source
À partir de Swift 4:
la source
J'ai découvert un autre problème. C'est peut-être un bogue introduit dans iOS 5, mais j'ai pensé le signaler à quiconque le rencontrait.
Si vous ne définissez aucun texte par défaut pour le bouton dans le XIB, aucun texte n'apparaîtra jamais si vous le définissez par programme. Et si vous définissez du texte dans le XIB, tout texte que vous attribuez par la suite au bouton par programme sera tronqué à la taille du texte par défaut.
Et enfin, si vous affichez la vue avec votre bouton, puis invoquez une autre vue (comme une feuille d'action), puis la rejetez, le texte que vous avez attribué au bouton par programme sera effacé et la légende du bouton reviendra à ce que vous avez défini dans le XIB.
la source
Même si le problème de Caffeine Coma a été résolu, je voudrais offrir une autre cause potentielle pour que le titre n'apparaisse pas sur un UIButton.
Si vous définissez une image pour l'UIButton en utilisant
Il peut couvrir le titre. J'ai découvert cela à la dure et j'imagine que certains d'entre vous finissent par lire cette page pour la même raison.
Utilisez plutôt cette méthode
pour l'image du bouton et le titre ne seront pas affectés.
J'ai testé cela avec des boutons créés par programme et des boutons créés dans un fichier .xib
la source
pour swift:
la source
Il s'avère que les documents vous donnent la réponse! UIButton ignorera le changement de titre s'il a déjà une chaîne attribuée à utiliser (avec semble être la valeur par défaut que vous obtenez lorsque vous utilisez le générateur d'interface Xcode).
J'ai utilisé ce qui suit:
la source
Une autre cause possible est la suivante:
Si vous essayez de définir le titre du bouton dans la
(id)initWithNibName: ...
méthode, la propriété de votre bouton sera toujours nulle. Il n'a pas encore été attribué à l'UIButton.Vous devez être sûr de définir vos boutons dans une méthode telle que
(void)viewWillLoad
ou(void)viewWillAppear
, mais vous ne voulez probablement pas les définir aussi tard que(void)viewDidAppear
.la source
Parfois, cela peut devenir vraiment compliqué. Le moyen le plus simple est de " rafraîchir " la vue des boutons!
la source
J'ai continué à avoir des problèmes avec cela, la seule solution était d'ajouter une image et une étiquette en tant que sous-vues à uibutton. Puis j'ai découvert que le problème principal était que j'utilisais un UIButton avec le titre: Attribué. Quand je l'ai changé en Plain, le simple réglage du titleLabel.text a fait l'affaire!
la source
@funroll a tout à fait raison. Ici vous pouvez voir ce dont vous aurez besoin Assurez-vous que la fonction ne s'exécute que sur le thread principal . Si vous ne voulez pas traiter les threads, vous pouvez faire comme ceci par exemple: créer NSUserDefaults et dans ViewDidLoad la condition de contrôle a été pressé sur le bouton dans une autre vue ou non (dans une autre vue définie dans NSUserDefaults, les informations nécessaires) et en fonction des conditions définies, le titre nécessaire pour votre UIButton, donc [yourButton setTitle: @ "Title" forState: UIControlStateNormal];
la source
Assurez-vous que vous êtes sur le fil principal.
Sinon, il enregistrera toujours le texte du bouton. Il sera là lorsque vous inspecterez l'objet dans le débogueur. Mais cela ne mettra pas à jour la vue.
la source