web-dev-qa-db-fra.com

changer le texte du bouton et désactiver le bouton dans iOS

Comment modifiez-vous le texte du bouton et désactivez-vous un bouton dans iOS?

100
Namratha

Hey Namratha, Si vous demandez comment changer le texte et l'état activé/désactivé d'un bouton UIB, vous pouvez le faire assez facilement comme suit:

[myButton setTitle:@"Normal State Title" forState:UIControlStateNormal]; // To set the title
[myButton setEnabled:NO]; // To toggle enabled / disabled

Si vous avez créé les boutons dans Interface Builder et souhaitez y accéder via le code, vous pouvez tirer parti du fait qu'ils sont transmis en tant qu'argument aux appels IBAction:

- (IBAction) triggerActionWithSender: (id) sender;

Cela peut être lié au bouton et vous obtiendrez le bouton dans l’argument sender lorsque l’action sera déclenchée. Si cela ne vous suffit pas (car vous devez accéder aux boutons ailleurs que dans les actions), déclarez une prise pour le bouton:

@property(retain) IBOutlet UIButton *someButton;

Ensuite, il est possible de lier le bouton dans IB au contrôleur, le code de chargement de la carte NIB définira la valeur de la propriété lors du chargement de l'interface.

201
MGunetileke
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

Utilisez UIControlStateNormal pour définir votre titre.

Il y a deux ou trois états fournis par UIbuttons, vous pouvez y jeter un coup d'œil:

[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];
20
user1281651

Si quelqu'un, cherchant une solution à Swift, atterrit ici, ce serait:

myButton.isEnabled = false // disables
myButton.setTitle("myTitle", for: .normal) // sets text

Documentation: isEnabled , setTitle.

Ancien code:

myButton.enabled = false // disables
myButton.setTitle("myTitle", forState: UIControlState.Normal) // sets text
17
mikiqex

En supposant que le bouton est une UIButton:

UIButton *button = …;
[button setEnabled:NO]; // disables
[button setTitle:@"Foo" forState:UIControlStateNormal]; // sets text

Voir la documentation de UIButton .

9
zoul

Dans Swift 3, vous pouvez simplement changer le titre d'un bouton en:

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

et vous désactivez le bouton par:

button.isEnabled = false

.normal est identique à UIControlState.normal car le type est inféré.

3
lmiguelvargasf

Pour changer le titre du bouton:

[mybtn setTitle:@"My Button" forState:UIControlStateNormal];
[mybtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

Pour désactiver:

[mybtn setEnabled:NO];
3
Bhavin Ramani

Si vous souhaitez modifier le titre en réponse à l'appel, vous pouvez essayer ceci dans la méthode IBAction du bouton dans votre délégué de contrôleur de vue. Cela permet d'activer et de désactiver un chat vocal. La configuration du chat vocal n’est pas couverte ici!

- (IBAction)startChat:(id)sender {
UIButton *chatButton = (UIButton*)sender;
if (!voiceChat.active) {
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat will become live. Please be careful with feedback if your friend is nearby."
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];
    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    [voiceChat start];
    voiceChat.active = YES;
    [chatButton setTitle:@"Stop Chat" forState:UIControlStateNormal];
}
else {
    [voiceChat stop];
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat is closed"
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    voiceChat.active = NO;
    [chatButton setTitle:@"Chat" forState:UIControlStateNormal];
}

}

voiceChat est bien sûr spécifique au chat vocal, mais vous pouvez utiliser votre propriété ow local boolean pour contrôler le commutateur.

0
Tim

Swift 4 avec extension

ensemble: 

// set button label for all states
extension UIButton {
    public func setAllStatesTitle(_ newTitle: String){
        self.setTitle(newTitle, for: .normal)
        self.setTitle(newTitle, for: .selected)
        self.setTitle(newTitle, for: .disabled)
    }
}

et utilise:

yourBtn.setAllStatesTitle("btn title")
0
Oz Shabat