Question

partout où ils disent ce que IBAction est, mais ne pas expliquer ce que les moyens entiers de déclaration.

Qu'est-ce que l'expéditeur et id?

Cordialement, Namratha

Était-ce utile?

La solution

  1. D'après mes IBAction connaissances juste implique void

  2. id est un type générique C, qui accepte des objets de toute nature / classe. Il est un peu semblable à ce pointeur vide dans C. Nous pouvons utiliser id comme paramètre d'une méthode, en cas, si des objets de type de différence de classes auront accès à cette méthode.

  3. sender, ici,

    • est un nom de paramètre nommé humain (vous pouvez le nommer quoi que ce soit)
    • il renvoie l'objet qui appelle la méthode changeGreeting:

Exemple:

laisse supposer la méthode changeGreeting: est définie dans ClassA, et il se lit comme suit.

- (IBAction)changeGreeting:(id)sender {

    [sender setText:@"Hello %@", [sender class]];

    // Nothing can be returned from this method
}

Et considérer que nous avons les lignes Class B suivantes.

// LINE 1
[aLabel addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];

// LINE 2
[aTextField addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];

à la ligne 1, est le aLabel expéditeur et objOfClassA est le récepteur . Et en ligne 2: aTextField est le expéditeur et objOfClassA est le récepteur . HereaLabel & aTextField sont appelés expéditeurs parce qu'ils sont appeler la méthode changeGreeting:. Et objOfClassA est appelé récepteur parce que la méthode objOfClassA's de changeGreeting: est appelé ici.

Quand les touches de l'utilisateur à l'intérieur du aLabel ou aTextField, leur text seront modifiés pour Hello UILabel ou Hello UITextField respectivement.

L'autre façon: Nous pouvons également appeler la méthode de changeGreeting: de objOfClassA de Class B comme suit.

[objOfClassA changeGreeting:aLabel];
[objOfClassA changeGreeting:aTextField];

Comme le code ci-dessus est explicite, objOfClassA est le récepteur . Mais aLabel & aTextField ne sont pas les expéditeurs . Parce qu'ils ne sont pas d'appeler la méthode. Ici, ils ne sont que les arguments. Ici, l'expéditeur réel est Class B, mais aLabel et aTextField sont passés dans le (id)sender argument. Quoi qu'il en soit le résultat de l'exécution de la méthode est identique.

Autres conseils

Peut-être que vous devriez vérifier un tutoriel Objective-C ( comme celui-ci ), comme cela est assez basique.

Le IBAction est défini comme étant « vide », il signifie que le procédé ne comporte pas de valeur de retour. Il est utile que pour Interface Builder, il sait que vos méthodes sont en fait une action que vous pouvez lier.

La partie (id) de l'expéditeur est un (seul) paramètre à votre méthode, qui est nommé expéditeur. (Id) indique que le type du paramètre peut être tout objet:

De Objective-C FAQ :

Qu'est-ce que est id?
Il est un type générique C qui utilise Objective-C pour un objet quelconque. [...]

IBAction est un mot-clé (#define'd à void) que Interface Builder cherche dans votre code source, et si elle le trouve comme un type de retour, il ajouter à la liste des actions possibile vous pouvez câbler votre IB des éléments à.

id est un type d'objet générique en Objective-C qui indique any objet Objective-C.

et sender est juste le nom du paramètre id typé.

Fonctionnellement disant: IBAction est un mot-clé pour identifier les méthodes que vous pouvez créer un lien vers par Interface Builder. (Id) expéditeur est nécessaire d'identifier l'objet déclenche la méthode dans le cas où vous utilisez la même méthode pour plusieurs contrôles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top