2014-04-29 30 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中進行動畫製作,而不是使用轉換方法。 –