2014-04-29 31 views
4

我有一个视图控制器,其中有一个按钮和一个窗口。ChildViewController视图进入然后消失

通过按下按钮,窗口中的视图应该改变。

窗口中的视图是另一个ViewController及其视图。

按下按钮时,所有的方法viewDidLoad,viewWillAppear,viewDidAppear运行。

然而,经过viewDidAppear运行,该视图中消失,而不运行viewWillDisappearviewDidDisappear

的观点确实出现了前一秒钟出现这种情况,和它的所有元素都intialized,如果我暂停与运行调试窗口,以及任何UI元素,它们不为空。

为什么会发生这种情况?

这里是我添加视图代码:

if(![self.childViewControllers containsObject:_detailsContainer]){ 

    _detailsContainer.view.frame = self.scrollView.bounds; 
    [_detailsContainer willMoveToParentViewController:self]; 
    [self addChildViewController:_detailsContainer]; 
    UIViewController *currentViewController = [_mainSource viewControllerForContentAtIndex:self.pageIndex]; 
    [self transitionFromViewController:currentViewController toViewController:_detailsContainer duration:0.2 options:UIViewAnimationOptionTransitionCrossDissolve animations:NULL completion:^(BOOL finished){ 

    [_detailsContainer didMoveToParentViewController:self]; 

    }]; 
} 

这是我viewWillAppear和子视图控制器的viewDidAppear

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    if(self.isEditingDetails){ 
     [self setUserDetails:[self.userSettings getUserDetails]]; 
    } 

} 

-(void)viewDidAppear:(BOOL)animated{ 

    [super viewDidAppear:animated]; 
    LogInfo(@"details view did appear"); 

} 

回答

0

我觉得你的问题是发生因少数的UIViewController遏制问题。

当你调用[self addChildViewController:_detailsContainer]系统会自动调用[_detailsConter willMoveToParentViewController:self]。但是,在转换之前,您必须致电[currentViewController willMoveToParentViewController:nil]

此外,您必须在动画的完成块中调用[currentViewController removeFromParentViewController]

看到这个答案如何使用transitionFromViewController...Proper usage of transitionFromViewController:toViewController:duration:options:animations:completion:

+0

实际调用currentController removeFromParentViewController一个例子是不是我需要的,因为我想保持电流控制器(因为它是永久性的)和新的控制器只是换入点击按钮 –

+0

不用'transitionFromViewController'就可以做到这一点,因为这通常会取代现有的。您可以使用普通的UIView'animateWithDuration'动画在您的新ViewController中进行动画制作,而不是使用转换方法。 –