【问题标题】:Calling [UINavigationController pushViewController:animated:] is no-ops and it will trigger another pushViewController调用 [UINavigationController pushViewController:animated:] 是无操作的,它将触发另一个 pushViewController
【发布时间】:2023-04-09 11:56:01
【问题描述】:

我目前正在处理以下情况,我需要在短时间内依次推送两个viewController(A和B)。

这就是我所做的。

  1. 第一个电话,[UINavigationController pushViewController:vcA animated:yes]
  2. [navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated],我打电话给[UINavigationController pushViewController:vcB animated:yes]

由于我已经覆盖了[UINavigationController pushViewController:animated] 中的一些功能,我希望[UINavigationController pushViewController:animated] 只触发两次,一次在推送vcA 时触发,一次在推送vcB 时触发。

但是目前的情况是[UINavigationController pushViewController:animated]会被触发3次:

  1. 我们第一次拨打[UINavigationController pushViewController:vcA animated:yes]
  2. 我们第二次致电[UINavigationController pushViewController:vcB animated:yes]。然而,这很奇怪,因为在这一点上,这并没有做任何事情。我检查了NavigationController.viewControllers,发现vcB没有被推送
  3. 第三次,再次触发[UINavigationController pushViewController:vcB animated:yes],又被[_UIViewControllerTransitionCoordinator _applyBlocks:releaseBlocks:]触发,完整的stacktrace可见here

所以我的问题是,第三个[UINavigationController pushViewController:vcB animated:yes] 是从哪里来的?我确定我没有覆盖任何_UIViewControllerTransitionCoordinator

【问题讨论】:

    标签: ios uiviewcontroller uinavigationcontroller uikit pushviewcontroller


    【解决方案1】:

    如果你真的想这样做(不是最佳做法)

    试试这个代码:

    navigationController?.pushViewController(vcA, animated: false)
    navigationController?.pushViewController(vcB, animated: true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2016-12-27
      相关资源
      最近更新 更多