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


107

Comment changer le texte du bouton et désactiver un bouton dans iOS?

Réponses:


208

Hey Namratha, Si vous demandez comment changer le texte et l'état activé / désactivé d'un UIButton, cela peut être fait 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 que vous souhaitez y accéder dans le code, vous pouvez profiter du fait qu'ils sont passés en argument aux IBActionappels:

- (IBAction) triggerActionWithSender: (id) sender;

Cela peut être lié au bouton et vous obtiendrez le bouton dans l' senderargument lorsque l'action est déclenchée. Si cela ne 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 NIB définira la valeur de la propriété lors du chargement de l'interface.


Je vous remercie! J'ai des UIButtons dans mon application mais je ne les ai mentionnés nulle part dans le code. J'ai utilisé le constructeur d'interface pour enregistrer le mécanisme d'action cible (à cette fin, j'ai quelques méthodes IBAction pour gérer les clics sur les boutons) alors comment accéder aux boutons ??
Namratha

1
Je veux aussi ajouter cela si vous voulez que la propriété @ soit déclarée pour vous. Dans XCode 4, maintenez la touche CTRL enfoncée, cliquez sur le bouton puis faites glisser votre souris dans le fichier .h correspondant de la vue. Une boîte de dialogue apparaît pour vous demander le nom de la propriété. Alors voila, vous aurez la propriété à utiliser dans votre code!
milesmeow

21
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

Utilisez UIControlStateNormalpour définir votre titre.

Il y a quelques états fournis par UIbuttons, vous pouvez jeter un œ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];

J'allais attribuer +1 à ce message, mais j'ai décidé de ne pas le faire. [self.eraseButton setTitle: @ "Effacer" forState: UIControlStateDisabled]; Cela n'atténue pas le bouton. Il ne fait rien, si vous avez déjà définiEnable: comme non.
coolcool1994

18

Si quelqu'un, qui cherche une solution à Swift, atterrissait 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

'setTitle ( : forState :)' a été renommé en 'setTitle ( : for :)'
Lavi Avigdor

10

En supposant que le bouton est un UIButton:

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

Consultez la documentation pour UIButton.


3

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

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

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

et vous désactivez le bouton en:

button.isEnabled = false

.normalest le même que UIControlState.normalparce que le type est déduit.


Que devons-nous utiliser s'il s'agit d'un bouton d'action?
Karthikeyan Sk

1

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

Si vous souhaitez modifier le titre en réponse au fait d'être tapé, vous pouvez essayer ceci dans la méthode IBAction du bouton dans votre délégué de contrôleur de vue. Cela active et désactive 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é booléenne locale pour contrôler le commutateur.

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.