2012-06-22 58 views
1

我摆弄一些代码试图让UIViewController遏制工作(在iPad应用程序中)。UIViewController遏制崩溃

该场景如下:我有一个观点,我想显示第二个视图的顶部。我想有第二个(不同的)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:持续时间:选择:动画:完成:]”

任何人都知道如何解决这个问题?我对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