Ich habe einen einfachen Test durchgeführt, um mehr über den Contact Controller zu erfahren.
Ich habe einen View-Controller, wo ich hinzugefügt/entfernt, um einen View-Controller mit zwei Tasten Aktion: willMoveToParentViewController
und didMoveToParentViewController
MethodendidMoveToParentViewController wird zweimal aufgerufen
-(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);
}
Wenn I-View-Controller
- (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];
}
Klasse ProfileViewController
erstreckt UIViewController
und außer Kraft hinzufügen Ich habe die folgenden Protokolle:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewWillAppear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
Wenn ich View-Controller entfernen:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewDidDisappear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
Ich mag wissen würde Warum didMoveToParentViewController
zweimal aufgerufen wird?
Danke!
Können Sie auch die Eltern anmelden? Ich vermute, dass es in einem dieser Fälle "Null" gibt, um anzuzeigen, dass Sie den vorherigen Controller verlassen. –
Es ist ziemlich seltsam. Vielleicht sollten Sie einen Haltepunkt in die Methoden einfügen und den Stapel verfolgen. Ich denke jedoch, dass der 2. Aufruf von 'addSubview' und' removeFromSuperview' ausgelöst wird. – Sulthan
Ich stieß vor kurzem auf das gleiche Problem. Der Aufruf von ** removeFromParentViewController ** vor ** removeFromSuperview ** scheint das Problem für mich behoben zu haben. Das ist merkwürdig, da die Apple-Beispiele es so konfigurieren, wie Sie es haben. https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html#//apple_ref/doc/uid/TP40007457-CH11-SW3 –