2010-07-30 4 views
1

J'ai un UIViewController qui a un UIPopoverController qui a un UINavigationController puis un UIViewController. Comment puis-je de l'enfant UIViewController appeler une méthode (par exemple. - (void) mise à jour) dans le parent UIViewController? essayé de nombreuses combinaisons, mais ne fonctionnait toujours pas.Méthode d'appel dans les contrôleurs parents imbriqués

Répondre

5

votre enfant:

@interface MyChildController:UIViewController { 
    MyParentController *parent; 
} 
@property(nonatomic, assign) MyParentController *parent; 
@end 
@implementation MyChildController 
@synthesize parent; 
... 

Dans votre contrôleur parent, votre enfant lors de l'instanciation:

MyChildController *newChild = [[[MyChildController alloc] initWithNibName:nil bundle:nil] autorelease]; 

newChild.parent = self; 

... 

maintenant dans votre enfant que vous avez une ref à votre parent que vous pouvez utiliser. Par exemple, une méthode dans votre enfant:

- (IBAction)someAction { 
    [self.parent doSomethingParentsDo]; 
} 
+0

Merci pour votre commentaire! Je sais qu'il y a quelques soucis avec la "séparation des soucis", mais j'ai vraiment besoin d'accéder à une fonction sur mon contrôleur de vue parent. Cherché le web haut et bas pour quelque chose d'aussi simple, merci. – Rail24

1

Une approche possible serait d'utiliser NSNotificationCenter. Dans la méthode viewDidLoad: du ViewController parent, enregistrez-le en tant qu'observateur d'une certaine notification (j'utiliserai @ "DummyNotification" comme nom de notification dans mon exemple). Ensuite, publiez cette notification à partir de la méthode appropriée dans le ViewController enfant. Le résultat ressemblera à quelque chose comme ceci:

ParentViewController.m

- (void) viewDidLoad 
{ 
    /* existing code */ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update) name:@"DummyNotification" object:nil]; 
} 

- (void) update 
{ 
    //method body 
} 

ChildViewController.m

//put this line wherever you want the ParentViewController to call -update 
[[NSNotificationCenter defaultCenter] postNotificationName:@"DummyNotification" object:self]; 

Référence: NSNotificationCenter Class Reference

En outre, cette question est étiqueté comme iPhone, mais Apple La documentation de UIPopoverController indique que la classe est utilisée spécifiquement pour l'iPad et ne fonctionnera pas sur d'autres appareils. Cette question est-elle mal étiquetée?

Référence: UIPopoverController Class Reference

Questions connexes