4

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

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

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

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

然而,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");

}
4

1 回答 1

0

我认为您的问题是由于一些 UIViewController 包含问题而发生的。

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

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

有关如何正确使用 transitionFromViewController:toViewController:duration:options:animations:completion的示例,请参阅此答案:transitionFromViewController...

于 2014-04-29T19:51:59.633 回答