transitionFromViewController:toViewController错误:子视图控制器必须具有公共父视图控制器

时间:2014-03-05 21:29:50

标签: objective-c uiviewcontroller uinavigationcontroller childviewcontroller parentviewcontroller

我正在尝试使用self作为容器,使用视图控制器包含从当前视图控制器self.aVC转换为self.navigationController。当我运行以下代码时,弹出“子视图控制器必须有一个公共父视图控制器”错误,但两个NSLog显示相同的parentViewController。

这里似乎有什么问题?任何帮助表示赞赏。

[self willMoveToParentViewController:nil];
[self.navigationController addChildViewController:self.aVC];
[self.aVC.view setFrame:self.bottomFrame];

NSLog(@"%@",self.parentViewController);
NSLog(@"%@",self.aVC.parentViewController);

//    __weak __block SBSomeVC *weakSelf = self;
[self transitionFromViewController:self toViewController:self.aVC duration:0.3 options:UIViewAnimationOptionTransitionNone animations:^{
    [self.aVC.view setFrame:self.view.bounds];
} completion:^(BOOL finished) {
    [self.aVC didMoveToParentViewController:self.navigationController];
    [self removeFromParentViewController];
}];

2 个答案:

答案 0 :(得分:2)

错误:

  

子视图控制器必须具有公共父视图控制器

告诉你一切。参与转换的两个视图控制器必须具有相同的父级。因此,您需要使用addChildViewController:方法将它们添加到父级。否则它将无法工作。

父视图控制器必须调用transitionFromViewController:toViewController:duration方法 。不是孩子。

答案 1 :(得分:1)

据我了解,必须在给定的视图控制器上调用-transitionFromViewController:toViewController:duration:以在两个子视图控制器之间进行转换。

因此,在您的情况下,您应该在父视图控制器类中移动该方法调用。

您还应该确保您作为参数传递的视图控制器已经添加为父视图控制器的子视图控制器,或者您将继续获得相同的错误。

参考:https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html