我有一个视图控制器,其中有一个按钮和一个窗口。
按下按钮,窗口中的视图应该会改变。
窗口中的视图是另一个ViewController及其视图。
按下按钮时,viewDidLoad
,viewWillAppear
,viewDidAppear
的所有方法都会运行。
但是,在viewDidAppear
运行后,视图会消失,而不会运行viewWillDisappear
和viewDidDisappear
在这种情况发生之前,视图确实会出现一秒钟,并且它的所有元素都是初始化的,如果我使用调试窗口暂停运行,并且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];
}];
}
以下是子视图控制器的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 :(得分:0)
我认为由于一些UIViewController包含问题,您的问题正在发生。
当您致电[self addChildViewController:_detailsContainer]
时,系统会自动拨打[_detailsConter willMoveToParentViewController:self]
。但是,您必须在转换前致电[currentViewController willMoveToParentViewController:nil]
。
此外,您必须在动画的完成区中调用[currentViewController removeFromParentViewController]
。
有关如何使用transitionFromViewController...
Proper usage of transitionFromViewController:toViewController:duration:options:animations:completion: