iOS presentViewController不会调用viewDidLoad

sno*_*und 4 objective-c viewdidload ios presentviewcontroller

我正在实现自己的"后退"按钮.其中onClick,以下代码在ViewController被解雇的(VC)中执行:

  1. 关闭当前VC(VC#1)
  2. 弹出当前VC(VC#1)关闭我的自定义 navigationStack
  3. 从中获取最后一个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: ^{ }];
}];
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我的印象是viewDidLoadpresentViuewController使用时总会被调用?
  2. 我使用viewDidLoadVC#2中的一个名为ONLY的方法"构建"屏幕.iOS如何在不显示屏幕的情况下显示viewDidLoad

顺便说一下,我没有使用故事板.任何帮助表示赞赏!

mck*_*ejm 6

我的猜测是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];
}
Run Code Online (Sandbox Code Playgroud)

编辑:既然你验证了它viewWillAppear被调用,那么我会说它是由你如何管理视图控制器生命周期.即使使用标准UINavigationController,viewDidLoad也不会在导航堆栈上弹出项目时显示视图时调用.viewWillAppear如果你没有使用,我会把你的逻辑移到UINavigationController