30 votes

Obtenir le texte du bouton d'IBAction - iPhone

Lorsqu'une IBAction est appelée:

 -(IBAction) onClick1: (id) sender;
 

Qu'est-ce qui est transmis à l'expéditeur? Puisqu'il est connecté via l'IB, je ne suis pas vraiment sûr. Ma question est de savoir comment obtenir le texte du bouton pour être l'objet passé (NSString le plus probable) afin que je puisse l'appeler à l'intérieur de l'implémentation de l'action.

 -(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}
 

60voto

Matt Ball Points 4929

Le sender doit être le contrôle qui a initié l'action. Cependant, vous ne devez pas assumer son type et le laisser à la place défini comme un id . Au lieu de cela, vérifiez la classe de l'objet dans la méthode réelle comme suit:

 - (IBAction)onClick1:(id)sender {
    // Make sure it's a UIButton
    if (![sender isKindOfClass:[UIButton class]])
        return;

    NSString *title = [(UIButton *)sender currentTitle];
}
 

25voto

Marc W Points 13166

C'est en fait:

 -(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}
 

sender n'est pas un NSString , c'est du type id . C'est juste le contrôle qui a envoyé l'événement. Donc, si votre méthode est déclenchée sur un clic de bouton, l'objet UIButton sur lequel vous avez cliqué sera envoyé. Vous pouvez accéder à toutes les méthodes et propriétés UIButton standard par programme.

14voto

GameLoading Points 3337
-(IBAction) onClick1: (id) sender {

UIButton *btn = (UIButton *)sender;


//now btn is that object. and to get title directly

NSLog(@"Clicked button: %@",[[btn titleLabel] text]);

//suresh is right..


}

10voto

VSN Points 1570

Écrivez simplement le code suivant

 -(IBAction) getButtonTitle:(id)sender
{
     UIButton *button = (UIButton *)sender; 
     NSString *buttonTitle = button.currentTitle;
     NSLog(@"Button Title %@",buttonTitle);

}
 

C'est tout ... vous l'avez fait !!!

2voto

Marc Charbonneau Points 30464

L'expéditeur doit être défini comme type id, pas int ou NSString. L'expéditeur est l'objet réel qui appelle la méthode; si vous l'avez connecté à un bouton, ce sera un UIButton, s'il s'agit d'un champ de texte, un UITextField. Vous pouvez l'utiliser pour obtenir des informations du contrôle (par exemple la valeur de chaîne actuelle du champ de texte), ou la comparer à une variable d'instance IBOutlet si vous avez plusieurs contrôles connectés à la même méthode d'action.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X