didMoveToParentViewController

didMoveToParentViewController

关于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:

10-06 01:45