6

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

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

当前视图控制器

发生的事情是后面的作品在视觉上起作用 - 即当前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. viewDidLoad我使用仅在 VC#2 中调用的方法“构建”屏幕。iOS如何显示屏幕而不进入viewDidLoad

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

4

2 回答 2

5

我的猜测是viewWillAppear被调用但viewDidLoad不是,至少在你期望的时候不是。 viewDidLoad应该调用一次,但取决于您管理视图控制器的方式,viewDidLoad可能不会在每次视图出现时触发(加载后发生)。

The completion handler is called after the viewDidAppear: method is called on the presented view controller.来自presentViewController 文档

所以把它放在你的代码中,并在调用时设置一个断点,super并在发生这种转换时验证它是否被调用。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
}

编辑:既然您验证了它viewWillAppear被调用,那么我会说它归结为您如何管理视图控制器生命周期。即使使用标准UINavigationController,viewDidLoad当由于在导航堆栈上弹出项目而显示视图时也不会调用。viewWillAppear如果您坚决不使用,我会将您的逻辑转移到UINavigationController

于 2014-07-28T02:51:28.317 回答
1

当我务实地制作后退按钮时,我使用:

[self.navigationController popViewControllerAnimated:YES];

这将调用 viewDidLoad 方法。使用它而不是您当前的代码。

于 2014-07-28T02:41:18.933 回答