2010-11-28 6 views
3

considérerais cette configuration de vue:Appeler une méthode d'instance d'une autre classe

alt text

J'ai un contrôleur de vue qui commute entre un ensemble de vues sous. Chaque sous-vue est une sous-classe UIView avec un code personnalisé. Pour changer de vue, j'utilise une instruction switch qui alloue la nouvelle vue comme vue actuelle. Cela fonctionne très bien.

Je suis maintenant dans une position où j'ai une vue (MainMenu) avec une sous-vue (PopUp) qui contient un UITableView. La vue PopUp est affichée et masquée via les méthodes d'instance de la classe MainMenu.h. Appelons les méthodes showPopUp et hidePopUp.

Lorsqu'un utilisateur sélectionne un élément de l'UITableView, il doit alors fermer manuellement la vue contenant (PopUp) en cliquant sur le bouton de fermeture lié à la méthode hidePopUp. Ce qui doit arriver lorsqu'un utilisateur sélectionne un élément dans UITableView est que la méthode hidePopUp doit être déclenchée automatiquement. Comment déclencher la méthode de l'instance hidePopUp via le didSelectRowAtIndexPath de UITAbleView?

Est-ce un travail pour un délégué d'application, ou peut-être NSNotificationCenter? J'ai essayé des choses comme appeler

[[[UIApplication sharedApplication] delegate] closePopUp]; 

du didSelectRowAtIndexPath en vain ...

Merci à l'avance, il est probablement quelque chose de simple que je suis absent. La programmation avec une grippe est difficile!

+0

Je ne comprends pas comment vous pouvez lier le bouton près de MainView mais pas le UITableView. Façon de ne pas mettre la logique dans le bouton de fermeture dans le didSelectRowAtIndex de la tableView? –

+0

Je ne peux pas faire référence aux objets de la classe MainView quand ils sont dans les méthodes d'instance de la sous-classe UITableView. C'est pourquoi j'ai besoin d'un délégué, il semble – Timbo

Répondre

1

Il y a plusieurs façons d'accomplir cela, comme les notifications ou le traitement d'un singleton comme le délégué de l'application (bien que l'utilisation du modèle singleton [anti] ne soit pas sans controverse). Personnellement, j'utiliserais la délégation.

Quelque chose comme:

@protocol PopUpDelegate 
@optional 
- (void)Popup:(YourPopUpClass *)popUp didEndWithData:(NSData *)blah; 
@end 

Vous pouvez ensuite mettre en œuvre ce protocole dans votre MainMenu, lui attribuer en tant que délégué de Popup, ont l'appel Popup la méthode du délégué lorsque le bouton de fermeture est poussé, et fermer la fenêtre de là .

est ici un message sur la façon de mettre en œuvre les délégués si vous choisissez d'aller dans cette voie: How do I create delegates in Objective-C?

Questions connexes