【问题标题】:transitionFromViewController:toViewController error: children view controllers must have a common parent view controllertransitionFromViewController:toViewController 错误:子视图控制器必须有一个共同的父视图控制器
【发布时间】:2014-03-05 21:29:50
【问题描述】:

我正在尝试从我当前的视图控制器 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];
}];

【问题讨论】:

    标签: objective-c uiviewcontroller uinavigationcontroller childviewcontroller parentviewcontroller


    【解决方案1】:

    错误:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-28
        • 1970-01-01
        • 2011-02-04
        • 2020-10-15
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        相关资源
        最近更新 更多