关于UIViewController
的Apple文档说:
如果要实现自己的容器 View Controller ,则它必须在调用willMoveToParentViewController:
方法之前调用 subview Controller 的removeFromParentViewController
方法,并传入父值nil。
当您的自定义容器调用addChildViewController:
方法时,它将在添加之前自动调用 View Controller 的willMoveToParentViewController
:方法作为子级添加。
如果要实现自己的容器 View Controller ,则必须在完成向新 Controller 的转换之后,或者如果没有转换,则必须在调用didMoveToParentViewController:
方法之后立即调用 subview Controller 的addChildViewController:
方法。removeFromParentViewController
方法在删除子级后会自动调用子级 View Controller 的didMoveToParentViewController:
方法。
为什么要调用这些方法?这些方法有什么用?
ProfileViewController *profile = [[ProfileViewController alloc] init];
profile.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self addChildViewController:profile];
[self.view addSubview:profile.view];
[profile didMoveToParentViewController:self];
即使删除了最后一行,我的代码也能正常工作。有人可以帮我吗?提前致谢
最佳答案
之所以使用这些方法,是因为添加或删除 subview Controller 时必须遵循的规则。在添加 subview Controller 之前,应首先调用willMoveToParentViewController
方法,然后再调用didMoveToParentViewController
方法。从父 View Controller 中删除 subview Controller 时,将以相反的顺序调用这些方法。addChildViewController:
自动调用[child willMoveToParentViewController:self]
。因此,应该在didMoveToParentViewController
之后调用addChildViewController:
。同样,removeFromParentViewController:
自动调用[child didMoveToParentViewController:nil]
。因此,应该在willMoveToParentViewController:
之前调用removeFromParentViewController: