我实施自己的'回归'按钮。在onClick
,ViewController
(VC)中被执行的以下代码被解雇:
navigationStack
navigationStack
获取最后一个VC(VC#2),并使用presentViewController
后视作品在视觉上有效 - 即当前VC
消失,之前出现VC
。但是,不调用viewDidLoad
方法。因此,屏幕未使用viewDidLoad
的数据更新进行更新。
[self dismissCurrentViewController:self completion:^{
[TWStatus dismiss];
FHBaseViewController *vcToDisplay = [[FHDataManager sharedInstance] popNavigationStack];
[vcToDisplay.homeVC presentViewController:vcToDisplay animated:NO completion: ^{ }];
}];
问题:
viewDidLoad
在使用presentViuewController
时总会被调用?viewDidLoad
的ONLY方法。如何在不进入viewDidLoad
的情况下显示屏幕?答案 0 :(得分:6)
我的猜测是viewWillAppear
被调用但viewDidLoad
不被调用,至少不是你预期的。 viewDidLoad
应该调用一次,但根据您管理视图控制器的方式,每次出现视图时都可能无法触发viewDidLoad
(加载后会发生这种情况)。
The completion handler is called after the viewDidAppear: method is called on the presented view controller.
所以在调用super
时使用断点将其放入代码中,并确认在发生此转换时调用它。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
编辑:既然您确认已调用viewWillAppear
,那么我会说它是如何管理视图控制器生命周期的。即使使用标准UINavigationController
,当视图显示为导航堆栈上弹出项目的结果时,也不会调用viewDidLoad
。如果您没有使用viewWillAppear
UINavigationController
答案 1 :(得分:2)
当我实用地制作后退按钮时,我使用:
[self.navigationController popViewControllerAnimated:YES];
这将调用viewDidLoad方法。使用它而不是当前的代码。