web-dev-qa-db-fra.com

Comment changer la propriété textLabel dans UIButton par programme dans iOS?

J'ai un UIButton qui devrait avoir 2 statuts - "Play" et "Pause"; c'est-à-dire - la première fois que l'utilisateur le voit, il dit "Play", puis chaque fois que l'utilisateur clique dessus, il doit basculer entre "Play" et "Pause".

J'ai réussi à créer le contrôleur lui-même - le contenu est lu et mis en pause correctement - mais je n'arrive pas à changer le texte de l'étiquette de texte UIButton.

J'utilise:

myButton.titleLabel.text = @"Play";

myButton.titleLabel.text = @"Pause";

Ça ne fonctionne pas. Le texte ne change pas. J'ai également essayé [myButton.titleLabel setText: @ "Pause"] et cela ne fonctionne pas aussi bien.

Comment puis-je le régler?

30
Ohad Regev

Ça devrait être:

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

Vous devez également passer le state. Vous pouvez vérifier les autres stateici .

Vous pouvez alors faire quelque chose comme ceci:

[myButton setTitle:@"Play" forState:UIControlStateNormal];
[myButton setTitle:@"Stop" forState:UIControlStateSelected];
67
Rui Peres

Swift 4

myButton.setTitle("Pause", for: .normal)
6
Wissa

J'ai trouvé que c'était quelque peu dépassé depuis que des chaînes attribuées avaient été ajoutées. Apparemment, les titres des boutons attribués dans un storyboard sont des chaînes attribuées. Les titres attribués ont priorité sur les titres NSString, donc si vous voulez utiliser une simple chaîne comme titre, vous devez d'abord supprimer le titre attribué. J'ai fait comme ci-dessous, bien qu'il puisse y avoir une meilleure façon. Vous pouvez, bien sûr, faire de votre nouveau titre également une chaîne attribuée.

[myButton setAttributedTitle: nil     forState: 0xffff];
[myButton           setTitle: @"Play" forState: UIControlStateNormal];
2
LostInTheTrees

Et si vous souhaitez le charger au chargement de la page et prendre en charge la langue localisée:

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    if (self.flagToChangeLabel){
        NSString* newBtnTitle = NSLocalizedString(@"LOCALIZED_KEY", nil);
        [self.laterButton setTitle:newBtnTitle forState:UIControlStateNormal];
        [self.laterButton setTitle:newBtnTitle forState:UIControlStateSelected];
    }
}
1
Aviram Net