【问题标题】:NavigationController Push is not working ios 11NavigationController Push 不工作 ios 11
【发布时间】:2018-11-02 14:34:12
【问题描述】:

您好,我有导航堆栈(流),顶部可见视图控制器是 M

  1. 我正在创建一个带有视图控制器 A 的新导航控制器 N
  2. 现在在 M 上呈现 N
  3. A (self.navigationcontroller) 中推送视图控制器 B

Push 不工作并且出现错误在现有的过渡或演示发生时;导航堆栈仅在 iOS 11 中不会更新。 谢谢,

【问题讨论】:

  • 分享代码或 Storybord 图片
  • 不使用故事板。通过 xib 和以编程方式实现。
  • ok share code of Now Presenting N on M and Pushing view controller B in A (self.navigationcontroller) 步骤二、三的代码
  • DispatchQueue.main.async { } 中尝试push
  • 当您尝试在第一个视图控制器的 viewDidLoad 中推送第二个视图控制器时会出现这种类型的错误。因为一个转变已经发生了。您的代码可能有助于更好地理解问题。请分享您的代码。

标签: ios iphone swift uinavigationcontroller presentviewcontroller


【解决方案1】:

斯威夫特 3/斯威夫特 4

首先,您需要设置要在其上呈现的导航控制器。然后在您的第二个视图控制器上进行导航过程。

  • 这样的例子

       let firstPresentVC = FirstVC(nibName:"FirstVC",bundle:nil)
       let navVC = UINavigationController(rootViewController:firstPresentVC)
       navVC.isNavigationBarHidden = true
       self.present(navVC, animated: true, completion:nil)
    

现在您在带有导航的当前堆栈中

之后你可以推送

let secondPushVC = secondPushVC(nibName:"secondPushVC",bundle:nil)
self.navigationController?.pushViewController(secondPushVC, animated: true)

【讨论】:

    【解决方案2】:

    您没有正确遵循导航结构。

    从视图控制器 M 你需要像这样呈现导航控制器 N

    self.navigationController?.present(navN, animated: true, completion: nil)
    

    这里 self 是视图控制器 MnavN 是新的导航控制器。

    通过这样做,它将从这里打开视图控制器 A,您需要推送到视图控制器 B:

    self.navigationController?.pushViewController(VCb, animated: true)
    

    Self 是视图控制器 AVCb 是新的视图控制器 B。

    【讨论】:

      【解决方案3】:

      您提到的内容不应造成问题。但是下面提到的并不能确定你提到的内容。

      在模态演示的完成块中将 push B 添加到 N 代码中

      present(N, animated: true) { [weak self]
          N.pushViewController(B, animated: true)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-13
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        相关资源
        最近更新 更多