我有一个 View Controller ,其中有一个按钮和一个窗口。
按下按钮,窗口中的 View 应该改变。
窗口中的 View 是另一个 ViewController 及其 View 。
当按下按钮时,viewDidLoad
、viewWillAppear
、viewDidAppear
的所有方法都会运行。
但是,viewDidAppear
运行后,view消失了,没有运行viewWillDisappear
和viewDidDisappear
在这发生之前 View 确实出现了一秒钟,并且它的所有元素都被初始化,如果我用调试窗口暂停运行,并且 po 任何 UI 元素,它们都不是空的。
为什么会这样?
这是我添加 View 的代码:
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];
}];
}
这是我的 subview Controller 的 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");
}
最佳答案
我认为您的问题是由一些 UIViewController 包含问题引起的。
当你调用[self addChildViewController:_detailsContainer]
时,系统会自动调用[_detailsConter willMoveToParentViewController:self]
。但是,您必须在转换之前调用 [currentViewController willMoveToParentViewController:nil]
。
此外,您还必须在动画的完成 block 中调用 [currentViewController removeFromParentViewController]
。
有关如何使用 transitionFromViewController...
的示例,请参阅此答案 Proper usage of transitionFromViewController:toViewController:duration:options:animations:completion:
关于ios - ChildViewController View 进入然后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23366464/