Coding SplitViewController personalizzato - quando dovrei chiamare viewWillAppear, viewDidAppear, ecc ...?
-
27-09-2019 - |
Domanda
Sto scrivendo il mio SplitViewController da zero (vale a dire da sottoclassi UIViewController
e non UISplitViewController
).
Ha due sotto-viewControllers (uno per il pannello di sinistra e uno per il dettaglio pannello di destra), a cui ho bisogno per inviare i messaggi appropriati (viewWillAppear, viewDidAppear, viewWillDisapppear and viewDidDisappear
).
Sono già inoltro quei messaggi quando il mio SplitViewController personalizzato li riceve e funziona benissimo. Tuttavia Ho difficoltà a capire quando inviare loro quando uno dei due sub-viewcontrollers è sostituito da uno nuovo, che ha anche bisogno di ricevere tali messaggi. Sto aggiungendo la vista del nuovo UIViewController
correttamente, ma i messaggi non sono chiamati in modo adeguato.
Il mio approccio iniziale era quello di chiamarli nel setter dei sub-viewControllers, chiamando viewWillDisappear
a UIViewController
per essere rilasciato e viewWillAppear
al nuovo set UIViewController
, ma questo viene eseguito prima viewDidLoad
e quindi presumo che non va.
Ho anche visto che ha un metodo UIView didAddSubview:
che potrebbe essere utile per sapere quando chiamare viewDidAppear
sul UIViewController
corrispondente.
Qualsiasi aiuto sarebbe molto apprezzato!
Soluzione
Se si desidera eseguire il mirroring UISplitViewController, sembra meglio avere solo UIViewControllers fittizi che stampano fuori ogni volta che ogni metodo viene chiamato.
Per quanto riguarda il problema attuale del l'ordinamento dei viewWillDisappear, viewWillAppear e viewDidLoad, basta fare:
-(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.
}