您的位置:首页 > 其它

addChildViewController相关

2015-07-08 21:27 405 查看

addChildViewController
相关

添加子控制器:

-
(container.view addSubView:childController.view)


1.1
[container addChildViewController:childController]


1.2
[childController didMoveToParentViewController:container]


容器控制器添加子控制器,子控制器的
(void)willMoveToParentViewController:(UIViewController *)parent
方法会自动被调用,但需要告诉系统何时添加完毕,必须手动调用子控制器的
didMoveToParentViiewController:


删除子控制器:

2.1
[childController.view removeFromSuperview]


2.2
[childController willMoveToParentViewController:nil]


2.3
[childController removeFromParentViewController]


先将自控器的视图从容器控制器视图中移除,在删除自控制器 之前 需要先调用子控制器的
willMoveToParentViewController:
方法传入nil参数,之后才调用子控制器的
removeFromParentViewController
方法,remove方法将自动调用
willMoveToParentViewController
方法,无需手动调用。

- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(5_0);


这个方法比较有迷惑性,需要注意查看上面的注释说明,这个方法其实是用来管理view hierarchy,并不会影响 view controller hierarchy,所以这里你仍然需要自己管理view controler hierarchy。这个方法同时也比较有用,比如在切换child view controller的显示时,这个方法更加好用,可以参考官方guide中的代码实现:

- (void) cycleFromViewController: (UIViewController*) oldC
toViewController: (UIViewController*) newC
{
[oldC willMoveToParentViewController:nil];                        // 1
[self addChildViewController:newC];

newC.view.frame = [self newViewStartFrame];                       // 2
CGRect endFrame = [self oldViewEndFrame];

[self transitionFromViewController: oldC toViewController: newC   // 3
duration: 0.25 options:0
animations:^{
newC.view.frame = oldC.view.frame;                       // 4
oldC.view.frame = endFrame;
}
completion:^(BOOL finished) {
[oldC removeFromParentViewController];                   // 5
[newC didMoveToParentViewController:self];
}];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: