Ho effettuato un semplice test per ulteriori informazioni sul controller di visualizzazione contenuto.
Ho un controller di vista dove ho aggiunto/rimosso un controller vista utilizzando due pulsanti azione:didMoveToParentViewController chiamato due volte
- (IBAction)myInfoAddAction:(id)sender {
profileViewController = [[ProfileViewController alloc] init];
[self addChildViewController: profileViewController];
UIView *__view = profileViewController.view;
[self.view addSubview: __view];
[profileViewController didMoveToParentViewController: self];
}
- (IBAction)myInfoRemoveAction:(id)sender {
[profileViewController willMoveToParentViewController: nil];
[profileViewController.view removeFromSuperview];
[profileViewController removeFromParentViewController];
}
Classe ProfileViewController
estende UIViewController
e override willMoveToParentViewController
e didMoveToParentViewController
metodi
-(void)willMoveToParentViewController:(UIViewController *)parent
{
[super willMoveToParentViewController: parent];
NSLog(@"willMoveToParentViewController -> %@", self);
}
-(void) didMoveToParentViewController:(UIViewController *)parent
{
[super didMoveToParentViewController: parent];
NSLog(@"didMoveToParentViewController -> %@", self);
}
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"viewWillAppear -> %@", self);
}
-(void)viewDidDisappear:(BOOL)animated
{
NSLog(@"viewDidDisappear -> %@", self);
}
Quando aggiungo vista controllore , Ho ottenuto i seguenti registri:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewWillAppear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
Quando rimuovo View Controller:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewDidDisappear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
mi piacerebbe sapere perché didMoveToParentViewController
viene richiamato due volte?
Grazie!
Potresti registrare anche il genitore? Sospetto che sia "nullo" in uno di questi casi per indicare che stai lasciando il controller precedente. –
È piuttosto strano. Forse dovresti inserire un breakpoint nei metodi e osservare la traccia dello stack. Tuttavia, penso che la seconda chiamata sia attivata da 'addSubview' e' removeFromSuperview'. – Sulthan
Ho avuto di recente lo stesso problema. Chiamare ** removeFromParentViewController ** prima ** removeFromSuperview ** sembra aver risolto il problema per me. È strano vedere che gli esempi Apple lo configurano come tu hai. https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html#//apple_ref/doc/uid/TP40007457-CH11-SW3 –