web-dev-qa-db-fra.com

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

Dans certains IBAction j'ai vu: 

- (IBAction)pushButton:(id)sender;

Ce (id)sender quand est-ce que je l'utilise?

35
CrazyDev
(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];
}
35
fuzz

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

(id) expéditeur est l'objet qui a envoyé le message à ce sélecteur. C'est comme dans les fonctions de délégué où le contrôle est transféré à la fonction, etc.

Vous l'utiliseriez si vous aviez 2 objets appelant ce sélecteur et que vous vouliez les distinguer. Bien sûr, vous pouvez simplement utiliser deux fonctions différentes, mais il est souvent plus propre et moins de duplication de code d'utiliser une seule fonction.

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


Un exemple pour cela, UITextField a un délégué qui se déclenche à la fin de l'édition de UITextField:

-(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];
   }
}
62
Ahmad Kayyali

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

"(id)" signifie que le type de variable est "id", c'est-à-dire "n'importe quel objet" (vous pouvez le voir comme haut de la hiérarchie des objets si vous le souhaitez.

Le nom de la méthode est pushButton: et nécessite 1 paramètre de tout type.

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

5
Pierre Watelet

Cela fait partie du mécanisme d'action-cible de Cocoa, qui permet aux objets de communiquer entre eux. En réponse à un événement (un clic de souris, par exemple), un objet (généralement un contrôle) envoie un message à un autre objet. L'expéditeur est appelé "expéditeur", le destinataire est la "cible" et le message est "l'action".

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

1
outis

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

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

  • (void) moveToEndOfLine: (id) expéditeur; // de NSResponder.h "

CELA IS EST UN PARAMÈTRE!

0
dung

Voici un exemple d’expéditeur (id) qui transmet les informations de balise de plusieurs boutons à un seul IBAction. Cette vidéo montre le concept d'expéditeur (id) en action, que j'ai trouvé très utile.

Programmation iPhone - Explication de l'expéditeur (id)

0
theMouse