ChildViewController视图进入然后消失

时间:2014-04-29 13:44:20

标签: ios childviewcontroller

我有一个视图控制器,其中有一个按钮和一个窗口。

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

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

按下按钮时,viewDidLoadviewWillAppearviewDidAppear的所有方法都会运行。

但是,在viewDidAppear运行后,视图会消失,而不会运行viewWillDisappearviewDidDisappear

在这种情况发生之前,视图确实会出现一秒钟,并且它的所有元素都是初始化的,如果我使用调试窗口暂停运行,并且po任何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];

    }];
}

以下是子视图控制器的viewWillAppearviewDidAppear

-(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");

}

1 个答案:

答案 0 :(得分:0)

我认为由于一些UIViewController包含问题,您的问题正在发生。

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

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

有关如何使用transitionFromViewController... Proper usage of transitionFromViewController:toViewController:duration:options:animations:completion:

的示例,请参阅此答案