我正在实现自己的"后退"按钮.其中onClick
,以下代码在ViewController
被解雇的(VC)中执行:
关闭当前VC(VC#1)
弹出当前VC(VC#1)关闭我的自定义 navigationStack
从中获取最后一个VC(VC#2)navigationStack
,然后使用它
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
VC#2中的一个名为ONLY的方法"构建"屏幕.iOS如何在不显示屏幕的情况下显示viewDidLoad
?
顺便说一下,我没有使用故事板.任何帮助表示赞赏!
我的猜测是viewWillAppear
被调用但viewDidLoad
不是,至少不是你预期的时候. viewDidLoad
应该调用一次,但是根据您管理视图控制器的方式,viewDidLoad
每次出现视图时都可能不会触发(在加载后会发生).
The completion handler is called after the viewDidAppear: method is called on the presented view controller.
来自presentViewController doc
所以把它放在代码中,在调用时使用断点,super
并在发生此转换时验证它是否被调用.
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; }
编辑:既然你验证了它viewWillAppear
被调用,那么我会说它是由你如何管理视图控制器生命周期.即使使用标准UINavigationController
,viewDidLoad
也不会在导航堆栈上弹出项目时显示视图时调用.viewWillAppear
如果你没有使用,我会把你的逻辑移到UINavigationController