2010-06-09 4 views
0

Cette ligne de code est AController.miPhone. A propos de la cible d'action à nouveau

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
    target:self 
    action:@selector(addItem)]; 

Et - (void) addItem: (id) expéditeur; est également dans AController.m

Si je veux appeler une méthode - (void) addItem1: (id) expéditeur; dans BController.m, comment puis-je changer pour le faire fonctionner? Que dois-je passer au paramètre cible?

Merci beaucoup!

Répondre

0

Vous devez passer une instance de BContorller. Si vous en voulez plus, s'il vous plaît commenter, et je verrai ce que je peux faire en 1h quand je suis libre.

BCont=[[BController alloc] init]; 
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
    target:BCont 
    action:@selector(addItem)]; 

Essayez-le.

+0

Merci. Une question de plus, quelle est la meilleure façon d'organiser les actions? J'ai trouvé qu'il y a trop de méthodes similaires dans différents contrôleurs, surtout si j'ai plusieurs tables et que j'utilise Core Data, il y aura beaucoup de code similaire. Toute suggestion? – zsong

+0

Hmmm ... Je ne suis pas sûr de ce que vous voulez dire exactement, mais créer une classe de base avec toutes les méthodes similaires, et sous-classer pour ajouter les différentes fonctionnalités pourrait fonctionner. –

0

Vous devez transmettre une instance de BController.

Soit dit en passant, une méthode d'action devrait techniquement avoir la forme:

- (void) actionName:(id) sender;

Juste le nom avec un paramètre d'expéditeur peut fonctionner mais parfois le temps d'exécution devient snippy à ce sujet.

+0

Je ne suis pas un expert (alors s'il vous plaît corrigez-moi ici), mais je pensais que c'était seulement nécessaire pour Mac OS X? Si elles sont liées à IBActions, c'est le cas, car sans expéditeur n'est pas correct sur Mac OS X, mais c'est OK pour iPhone. –

+0

Pas à ma connaissance. L'expéditeur est important car vous pouvez avoir plusieurs boutons différents qui doivent évoquer la même action ou l'action peut nécessiter des informations du contrôle. Ce n'est vraiment pas du tout lié à Interface Builder. J'ai vu des problèmes sur iPhone avec la forme incorrecte. – TechZen

+0

Objective-C avec sa liaison à l'exécution peut être difficile si vous n'êtes pas habitué. Les conventions de nommage sont très importantes, contrairement à d'autres langages, par exemple l'utilisation de '- (AttributeType *) attributeName' pour les getters et' - (void) setAtributeName: (AttributeType *) aValue; 'pour les setters. Le moteur d'exécution n'a aucun moyen de trouver ces méthodes pour les appels comme 'self.attributeName' ou' instance.attributeName' excepté par le modèle du sélecteur. – TechZen