transitionFromViewController:toViewController错误:子视图控制器必须有一个共同的父视图控制器。

3

我正在尝试使用视图控制器容器将当前视图控制器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个回答

4
错误信息:

子视图控制器必须有一个共同的父视图控制器

这说明了问题所在。参与转换的两个视图控制器必须具有相同的父视图控制器。因此,您需要使用 addChildViewController: 方法将它们都添加到父视图控制器中。否则它将无法工作。

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


1
据我所知,-transitionFromViewController:toViewController:duration: 必须在给定的视图控制器上调用,以在两个子视图控制器之间进行转换。
因此,在您的情况下,您应该将该方法调用移动到父视图控制器类中。
您还应确保作为参数传递的两个视图控制器已经添加为父视图控制器的子视图控制器,否则您将继续收到相同的错误。
参考文献:https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接