Comment modifiez-vous le texte du bouton et désactivez-vous un bouton dans iOS?
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.
[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];
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
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
.
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é.
Pour changer le titre du bouton:
[mybtn setTitle:@"My Button" forState:UIControlStateNormal];
[mybtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
Pour désactiver:
[mybtn setEnabled:NO];
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.
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")