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];
}];
4

2 回答 2

4

错误:

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

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

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

于 2014-03-05T21:42:36.837 回答
1

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

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

您还应该确保您作为参数传递的两个视图控制器都已添加为父视图控制器的子视图控制器,否则您将继续收到相同的错误。

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

于 2014-03-05T21:43:14.750 回答