iOS presentViewController不会调用viewDidLoad

时间:2014-07-28 02:34:57

标签: ios objective-c viewdidload presentviewcontroller

我实施自己的'回归'按钮。在onClickViewController(VC)中被执行的以下代码被解雇:

  1. 关闭当前VC(VC#1)
  2. 弹出当前的VC(VC#1)关闭我的自定义navigationStack
  3. navigationStack获取最后一个VC(VC#2),并使用
  4. 显示它

    presentViewController

    后视作品在视觉上有效 - 即当前VC消失,之前出现VC。但是,不调用viewDidLoad方法。因此,屏幕未使用viewDidLoad的数据更新进行更新。

     [self dismissCurrentViewController:self completion:^{
        [TWStatus dismiss];
        FHBaseViewController *vcToDisplay = [[FHDataManager sharedInstance] popNavigationStack];
        [vcToDisplay.homeVC presentViewController:vcToDisplay animated:NO completion: ^{ }];
    }];
    

    问题:

    1. 我觉得viewDidLoad在使用presentViuewController时总会被调用?
    2. 我' build'屏幕使用VCLY中viewDidLoad的ONLY方法。如何在不进入viewDidLoad的情况下显示屏幕?
    3. 是的,我没有使用故事板。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:6)

我的猜测是viewWillAppear被调用但viewDidLoad不被调用,至少不是你预期的。 viewDidLoad应该调用一次,但根据您管理视图控制器的方式,每次出现视图时都可能无法触发viewDidLoad(加载后会发生这种情况)。

来自presentViewController doc

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方法。使用它而不是当前的代码。