【问题标题】:Can't dismiss View Controller that's embedded in a Navigation Controller无法关闭嵌入在导航控制器中的视图控制器
【发布时间】:2019-06-01 11:19:58
【问题描述】:

我有以下情况。嵌入在导航控制器中的视图控制器。

这个视图控制器有一个按钮,它实例化一个标签栏控制器,然后显示它的一个视图控制器。

当我关闭标签栏控制器提供的控制器时,我总是在初始视图控制器中结束,在它的同一个实例中。

我尝试的是:

    func showHomeScreen()  {
    //trying to dismiss the current view controller ( will move this code out of this method once i figure out how to do it
    self.navigationController?.popViewController(animated: true)
    self.dismiss(animated: true, completion: nil)
    //showing the next view controller
    let tabBarController = storyboard?.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController

    tabBarController.selectedViewController = tabBarController.viewControllers?[1]
    present(tabBarController, animated: true, completion: nil)
}

self.navigationController?.popViewController => returns nil self.dismiss(animated: true, completion: nil) 似乎什么也没做。

谁能告诉我如何解决这个问题,我想它非常简单,但我找不到答案。

编辑:这就是我的故事板的外观:

https://pasteboard.co/HVdHp6P.png

https://pasteboard.co/HVdHHoG.png

【问题讨论】:

  • 太可怕了!我不明白,你想达到什么目的?一次多个操作,一个块。
  • @Mannopson 你到底有什么不明白的?我正在尝试关闭当前视图控制器,然后在当前视图控制器被关闭后移至下一个。前两行代码是我试图像我说的那样关闭当前的代码,但这不起作用,我在问我应该如何关闭它。
  • 如果是这样,您应该尝试类似:dismiss(animated: true, completion: { // do the rest of operations... })。这是给你的提示!在你的情况下,我发现了两个问题。 1.解雇vc。 2. 呈现 vc。所以,你被解雇的 vc 应该提供一个tabBarController ?
  • @bsod 有一个名为 LogInViewController 的视图控制器。此视图控制器嵌入在导航控制器中。这个视图控制器上有多个按钮,其中一个是登录按钮。当我按下登录按钮时,会进行网络调用,如果该调用成功,则调用 showHomeScreen() 方法。我现在想要实现的是:关闭 LogInViewController,然后导航到选项卡栏控制器之一。
  • 如果标签栏控制器是视图层次结构的支柱(通常是),那么为什么不将它设为根视图控制器呢?对你刚才所说的一切都是肯定的,除了一个警告。你不能从viewDidLoad 展示视图控制器,因为视图仍在构建中。视图控制器必须具有完全构造的视图才能呈现。但是,由于这是在应用启动时,您可以在 viewDidAppear 上显示不带动画的视图控制器,并将其隐藏在扩展的启动屏幕后面。

标签: swift uinavigationcontroller


【解决方案1】:

发送到下一个viewController后,尝试使用:

navigationController?.viewControllers.remove(at: 1)

这应该删除堆栈中第二个视图控制器。

【讨论】:

    【解决方案2】:

    如果视图控制器已被导航控制器推送,则效果很好:

    self.navigationController?.popToRootViewController(animated: true)
    

    【讨论】:

      【解决方案3】:

      正如我在您的代码中看到的那样。

      “A”VC 是“B”VC 的父级

      在您关闭“A”VC 后,“A”VC 无法呈现“B”VC。

      我认为正确的方法是:

      1.将“C”作为“A”和“B”的父级

      2.使“A”、“B”在同一层次的视图层次结构中,

      然后,“C”出现“A”,“A”消失,然后“C”出现“B”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-07
        • 2013-12-26
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        相关资源
        最近更新 更多