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?

Namratha
la source

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.

MGunetileke
la source
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];
hautement caféiné
la source
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
mikiqex
la source
'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.

zoul
la source
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];
Bhavin Ramani
la source
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.

lmiguelvargasf
la source
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")
Oz Shabat
la source
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.

Tim
la source