2013-05-03 71 views
0

我有以下代码,用相应的容器视图控制器替换容器视图中的另一个视图。这是从Apple文档复制的。transitionFromViewController视图不出现

编辑:苹果文档Creating Custom Container View Controllers

- (void)transitionToViewController:(UIViewController*)toViewController { 
    toViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    [self.childViewController willMoveToParentViewController:nil]; 

    [self addChildViewController:toViewController]; 
    // [self.view addSubview:toViewController.view]; 


    toViewController.view.frame = CGRectOffset(self.view.bounds, self.view.frame.size.width, 0); 

    [self transitionFromViewController:self.childViewController 
         toViewController:toViewController 
           duration:0.5 
           options:0 
          animations:^{ 
           toViewController.view.frame = self.view.bounds; 
          } 
          completion: ^(BOOL finished) { 
           NSLog(@"finished: %d", finished); 
           [self.childViewController removeFromParentViewController]; 
           [toViewController didMoveToParentViewController:self]; 

           self.childViewController = toViewController; 
          }]; 

} 

当这被执行,则toViewController.view实际上并没有出现。但是,viewWillAppear和viewDidAppear正被调用到ViewController.view中。在完成块中,完成的值为FALSE。所以有些东西不能正常工作。

我知道transitionFromViewController会将ViewController.view添加到视图层次结构中。如果我取消注释addSubview这一行,以便手动添加它,则视图确实会出现,但视图中的外观方法会多次调用。在这种情况下,完成块中的完成值为TRUE。

WelcomeViewController viewWillAppear 
WelcomeViewController viewWillAppear 
WelcomeViewController viewDidAppear 
finished: 1 
WelcomeViewController viewDidAppear 

我敢肯定,我不应该基于其他几个示例手动将视图添加到视图层次结构中。为什么它不工作?

+0

你有参考苹果的代码吗? – 2013-05-03 14:28:50

回答

0

原来上面的代码是正确的,问题在别处。问题在于,通过这种转换第一次,self.childViewController.view不在视图层次结构中。 self.childViewController本身位于视图控制器层次结构中,但视图不是。