38 votes

Objectif C: qu'est-ce qu'un "(id) expéditeur"?

Dans certains IBAction j'ai vu:

 - (IBAction)pushButton:(id)sender;
 

Ce (id)sender quand dois-je l'utiliser?

63voto

Ahmad Kayyali Points 5702

Matt Galloway, a décrit la signification de l' (id) sender dans les actions sur l'iPhone Dev SDK forums ainsi:

(id)sender est l'objet qui a envoyé le message pour que le sélecteur. C'est comme dans le déléguer des fonctions où vous avez le contrôle transmise à la fonction, etc.

Vous l'auriez fait si vous aviez 2 objets qui ont été en appelant cette sélecteur et vous avez voulu distinguer entre eux. Bien sûr, vous pouvez simplement utiliser deux fonctions différentes, mais il est souvent plus propre et moins de duplication de code pour utiliser une fonction.

Voir la UIControl Classe de Référence pour plus de détails.


Un exemple pour que, UITextField a un délégué qui se déclenche lorsque la UITextField édition se termine:

-(IBAction) editingEnded:(id) sender
{
   // the cast goes here, lets assume there's more than one UITextfield 
   // in this Owner and you want to know which one of them has triggered
   // the "editingEnded" delegate
   UITextField *textField= (UITextField*)sender;
   if(textfield == iAmTheLastTextField)
   {
     // for example login now.
     [self login];
   }
}

40voto

gotnull Points 4918
 (id)sender is the object which sent the message to that selector.
 

Exemple de code:

 - (IBAction)submitButton:(id)sender {
    UIButton *button = (UIButton *)sender;
    [button setEnabled:NO];
    [button setTitle:@"foo" forState:UIControlStateDisabled];
}
 

5voto

Rabskatran Points 923

"expéditeur" est le nom de la variable.

"(id)" signifie que le type de la variable est "id", qui est synonyme de "tout objet" (Vous pouvez le voir en haut de la hiérarchie de l'objet si vous voulez

Le nom de la méthode est le bouton-poussoir: et 1 paramètre d'aucune sorte.

Cette méthode sera lié à un bouton sur l'INTERFACE utilisateur. Le délégué de la ce de l'INTERFACE utilisateur recevra cet appel et aura une référence à la UIButton qui a fait l'appel. Parfois, vous n'en avez pas besoin, vous avez parfois besoin d'avoir accès à ces UIButton pour modifier ses propriétés, par exemple.

1voto

outis Points 39377

Il fait partie de la cible-le mécanisme d'action de Cacao, ce qui est une façon objets peuvent communiquer les uns avec les autres. En réponse à un événement (comme un clic de souris), un objet (généralement un contrôle de certains types) envoie un message à un autre objet. L'expéditeur est appelé, ainsi, "expéditeur", le récepteur est la "cible" et le message est "action".

Vous pouvez l'utiliser dans la cible du gestionnaire de messages pour obtenir des informations supplémentaires à propos de l'action de l'expéditeur.

0voto

dung Points 89

J'ai appris par les Rabskatran. Mais je wouldlike pour corriger la seule partie qui dit "expéditeur" est le nom de la variable. Il devrait être (à partir de la documentation d'Apple - https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html):

"Les méthodes invoquées par des messages d'action ont une signature spécifique: un seul paramètre, la tenue d'une référence à l'objet de lancer le message de l'action; par convention, le nom de ce paramètre est de l'expéditeur. Par exemple,

  • (void)moveToEndOfLine:(id)sender; // à partir de NSResponder.h"

C'EST DONC UN PARAMÈTRE!

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