我做了一个简单的测试,以更多地了解包含的视图控制器。
我其中我添加/移除使用两个按钮的视图控制器动作的视图控制器:didMoveToParentViewController被调用两次
- (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];
}
类ProfileViewController
延伸UIViewController
并重写willMoveToParentViewController
和didMoveToParentViewController
方法
-(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);
}
当添加视图控制器,我得到以下日志:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewWillAppear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
当我删除视图控制器:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewDidDisappear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
我想知道为什么didMoveToParentViewController
被调用两次?
谢谢!
你可以记录父母吗?我怀疑在其中一个案件中没有提到你要离开前一个控制器。 –
这很奇怪。也许你应该在这些方法中加入一个断点并观察堆栈跟踪。不过,我认为第二个调用是由'addSubview'和'removeFromSuperview'触发的。 – Sulthan
我最近碰到同样的问题。在** removeFromSuperview **之前调用** removeFromParentViewController **似乎已经解决了我的问题。这看起来很奇怪,苹果公司的例子像你这样配置它。 https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html#//apple_ref/doc/uid/TP40007457-CH11-SW3 –