【问题标题】:Swift - How to remove a viewcontroller from NavigationController?Swift - 如何从 NavigationController 中删除视图控制器?
【发布时间】:2016-11-30 05:53:43
【问题描述】:

我有 4 个 ViewController 连接到 NavigationController。它们的顺序是 1->2->3->4。当用户按下 4 上的后退按钮时,我希望他们被重定向到 2 而不是 3。同时,我还希望用户在按下 3 上的后退按钮时被重定向到 2 。 这可能吗?提前致谢。

【问题讨论】:

标签: swift xcode


【解决方案1】:

你当然可以这样做。只需在第 4 个 ViewController 上创建左栏按钮。并在该按钮操作上弹出到第二个视图控制器

      if let viewcontroller = self.navigationController?.viewControllers[1] where viewcontroller.isKindOfClass(YourController) {
       self.navigationController?.popToViewController(viewcontroller, animated: false)          }

【讨论】:

  • Swift3 中的小改动:如果 let viewcontroller = self.navigationController?.viewControllers[1], viewcontroller 是 YourViewController { let _ = self.navigationController?.popToViewController(viewcontroller, animated: false) }跨度>
  • 谢谢!有效。另一个问题,因为我是一个绝对的初学者:如何将其分配给后退按钮?我查看了 UIBarButtonSystemItems 列表,但似乎没有可用的后退按钮。
  • 第四个视图控制器 viewDidload self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.Plain, target: self, action:#selector(self.back(_:))) 和 action func backButtonAction(sender: AnyObject) { if let viewcontroller = self.navigationController?.viewControllers[1] where viewcontroller.isKindOfClass(YourController) { self.navigationController?.popToViewController(viewcontroller, animated: false) } }
【解决方案2】:
if let vc = self.viewControllerWithClass(YourVC.self) {

                    self.popToViewController(vc, animated: true)
}


extension UINavigationController {

    func viewControllerWithClass(_ aClass: AnyClass) -> UIViewController? {

        for vc in self.viewControllers {

            if vc.isMember(of: aClass) {

                return vc
            }
        }

        return nil
    }
}

【讨论】:

    【解决方案3】:

    您可以在导航堆栈中检查控制器。

    let controllers = navigationController!.viewControllers.reverse()
        for controller in controllers
        {
            if controller.isKindOfClass(YourController)
            {
                self.navigationController?.popToViewController(controller, animated: true)
                return
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 2018-01-04
      • 1970-01-01
      • 2017-03-23
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多