1

J'écris mon propre SplitViewController à partir de rien (c'est-à-dire en sous-classant UIViewController et non UISplitViewController).Codage personnalisé SplitViewController - quand dois-je appeler viewWillAppear, viewDidAppear, etc ...?

Il a deux sous-viewControllers (un pour le panneau de gauche et un pour le panneau droit de détail), auquel j'ai besoin d'envoyer les messages appropriés (viewWillAppear, viewDidAppear, viewWillDisapppear and viewDidDisappear).

Je transfère déjà ces messages lorsque mon SplitViewController personnalisé les reçoit et que cela fonctionne correctement. Cependant, j'ai du mal à savoir quand les envoyer quand l'un des deux sous-viewcontrollers est remplacé par un nouveau, qui doit également recevoir ces messages. J'ajoute la vue du nouveau UIViewController correctement mais les messages ne sont pas appelés adéquatement.

Mon approche initiale était de les appeler dans le setter des sous-viewControllers, appelant viewWillDisappear-UIViewController sur le point d'être libérés et viewWillAppear au nouveau UIViewController ensemble, mais celui-ci est exécutée avant viewDidLoad et donc je présume est faux.

J'ai également vu que UIView a une méthode didAddSubview: qui pourrait être utile de savoir quand appeler viewDidAppear sur le correspondant UIViewController.

Toute aide serait grandement appréciée!

Répondre

2

Si vous souhaitez mettre en miroir UISplitViewController, il semble préférable d'avoir seulement des UIViewControllers fictifs qui s'impriment à chaque appel de chaque méthode.

En ce qui concerne votre problème actuel de l'ordre de viewWillDisappear, viewWillAppear et viewDidLoad, il suffit de faire:

-(void)setSomeViewController(UIViewController newVC) 
{ 
    [oldVC viewWillDisappear]; 
    [newVC view]; // Causes newVC to load the view, 
        // and will automatically call -viewDidLoad 
    [newVC viewWillAppear]; 

    [oldVC.view removeFromSuperview]; 
    [self.view addSubview:newVC.view]; 

    //retain and release as appropriate 
    // other stuff you'll need to mirror, etc. etc. 
} 
+0

J'ai aussi remarqué que parfois -viewWillAppear: (ou était-ce -viewWillDisappear) est appelée automatiquement lorsque vous ajoutez/supprimez la vue d'un VC dans la hiérarchie. Certes, cela a été fait plus haut dans la hiérarchie de la vue afin de mettre en œuvre des transitions de vue personnalisées, mais il vaut la peine de garder à l'esprit. De plus, je pense qu'il y a quelque chose appelé UIViewControllerWrapperView ... –

+0

Pour autant que je sache, la base UIViewController ne le fait pas, mais les types hiérarchiques tels que UINavigationController, UITabBarController, etc. vont le faire. –

+0

Merci pour ce David Liu. J'ai également trouvé que surcharger - (void) la sous-vue AddAddubview: (UIView *) dans votre UIView personnalisé peut être très utile afin que le custom UISplitViewController puisse notifier ses sous-UIViewControllers que viewDidAppear. – monchote