【问题标题】:ChildViewController view entering and then disappearsChildViewController 视图进入然后消失
【发布时间】:2014-04-29 13:44:20
【问题描述】:

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

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

窗口中的视图是另一个 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");

}

【问题讨论】:

    标签: ios childviewcontroller


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 实际上调用 currentController removeFromParentViewController 不是我需要的,因为我想保留当前控制器(因为它是永久的),而新控制器只是单击按钮时的交换
    • 在不使用transitionFromViewController 的情况下尝试这样做可能是值得的,因为这通常会取代现有的。您可以在新的 ViewController 中使用普通 UIView animateWithDuration 动画来制作动画,而不是使用过渡方法。
    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多