2012-06-22 61 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