web-dev-qa-db-fra.com

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é par 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'
}
30
Organiccat

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 programmation.

25
Marc W

sender doit être le contrôle qui a initié l'action. Cependant, vous ne devez pas assumer son type et devez plutôt le laisser 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];
}
60
Matt Ball
-(IBAction)onClick:(id) sender {
     UIButton *btn = (UIButton *)sender;

    //now btn is the same object. And to get title directly
    NSLog(@"Clicked button: %@",[[btn titleLabel] text]);
}
14
GameLoading

É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 !!!

10
VSN

L'expéditeur doit être défini comme type id, et non 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.

2
Marc Charbonneau

Vous pouvez simplement utiliser ce qui suit pour obtenir le libellé du bouton et déterminer lequel a été cliqué:

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

Pour répondre à votre question, l'identifiant est l'objet du BI.

2
Suresh

Pour récupérer le texte à partir du bouton:

 NSLog(@"Date::%@",[btn titleForState:UIControlStateNormal]);          
1
Hardik Thakkar