Swift - 如何从 NavigationController 中删除视图控制器?

Posted

技术标签:

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

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

【问题讨论】:

使用 unwind segue,类似的答案还有很多。这里是one 如果你想快速回答,那么看看这个***.com/questions/31878108/… 使用 unwined segue ***.com/questions/12561735/… 【参考方案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
        
    

【讨论】:

以上是关于Swift - 如何从 NavigationController 中删除视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

滑动动作没有弹出到上一个控制器 - 我错过了啥?

从 UIView 子类推送导航控制器会导致崩溃

如何将以下代码从 Swift 2 转换为 Swift 5?

如何从 Podfile 检查 swift 版本?

如何从 userNotificationCenter 读取内容 - Swift

如何从 Swift 调用 jquery 函数?