【问题标题】:UIViewController containment crashingUIViewController 包含崩溃
【发布时间】:2012-06-22 13:54:25
【问题描述】:

我正在修改一些代码来尝试让 UIViewController 包含工作(在 iPad 应用程序中)。

场景如下:我有一个视图,我想在上面显示第二个视图。我想要第二个(不同的) UIViewController 管理与第二个视图的所有交互。第一个视图将在按下按钮时加载第二个视图。当按下按钮时,以下代码在第一个控制器中运行:

-(void)displayPropertyView // <-button triggers this
{
    // Need to instantiate a new view and add it to the main editor view.
    HPSQuestionListController* questionListController = [ [ HPSQuestionListController alloc ] init ];
    [self.view addSubview:questionListController.view];
    [self.view bringSubviewToFront:questionListController.view];
    [self pushViewController:questionListController animated:YES];

}
-(void)pushViewController:(UIViewController*)controller animated:(BOOL)animated
{
    [self addChildViewController:controller];
    //[controller didMoveToParentViewController:self];

    if (YES)
    {
        [self transitionFromViewController:self 
                          toViewController:controller 
                                  duration:1.0 
                                   options:nil 
                                animations:^{}
                                completion:^(BOOL finished){
            [controller didMoveToParentViewController:self];
        }];
    }
} 

应用程序在 transitionFromViewController 行崩溃:

子视图控制器和 必须有一个共同的父视图 调用时的控制器 -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]'

有人知道如何解决这个问题吗?我对 UIViewController 包含的理解是,我可以让两个控制器同时管理两个视图。这是错的吗?

【问题讨论】:

    标签: ios uiviewcontroller


    【解决方案1】:

    子视图控制器应该具有相同的父容器视图控制器(这就是错误消息所说的)。要添加子视图控制器,请在容器视图控制器中使用以下代码:

    [self addChildViewController:myVC1];
    [myVC1 didMoveToparentViewController:self];
    

    在容器视图控制器中你可以使用transitionFromViewController

    [self transitionFromViewController:myVC1 toViewController:myVC2 duration:2.0f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{} completion:^(BOOL finished) {
      [myVC1 removeFromParentViewController];
      [myVC2 didMoveToParentViewController:self];
    }];
    

    您正在尝试做一些没有多大意义的事情,self 不是您代码中的容器视图控制器。

    完整示例请参见:https://github.com/toolmanGitHub/stackedViewControllers

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      相关资源
      最近更新 更多