首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift - dismiss然后pop VC

Swift - dismiss然后pop VC
EN

Stack Overflow用户
提问于 2021-02-06 04:06:26
回答 2查看 90关注 0票数 0

我该如何忽略一个模态视图控制器以及它的被推送的父级?

代码语言:javascript
复制
self.presentingViewController?.dismiss(animated: true, completion: {
     self.parent?.navigationController?.popViewController(animated: true)
})

这只会忽略顶级模式。

EN

回答 2

Stack Overflow用户

发布于 2021-02-06 10:50:05

你可以走另一条路。首先,您的主视图中有UINavigationController。因此,您可以编写一个扩展,允许您转到导航堆栈中的控制器。

我试着像这样做一个实现:

代码语言:javascript
复制
extension UINavigationController {
    
    func routingPath(for controller: UIViewController) -> [UIViewController] {
        guard viewControllers.contains(controller) else {
            return []
        }
        var result: [UIViewController] = []
        for previousController in viewControllers {
            result.append(previousController)
            if controller === previousController {
                break
            }
        }
        return result
    }
    
    func performNavigation(toPrevious controller: UIViewController,
                           shouldDismissModals: Bool = true) {
        let previousViewControllers = routingPath(for: controller)
        guard !previousViewControllers.isEmpty else { return }
        viewControllers = previousViewControllers
        
        if shouldDismissModals, let _ = controller.presentedViewController {
            controller.dismiss(animated: true, completion: nil)
        }
    }
}

然后您可以为UIViewController创建一个特殊的方法

代码语言:javascript
复制
extension UIViewController {
    
    func returnBackIfPossible(to controller: UIViewController? = nil,
                              shouldDismissModals: Bool = true) {
        navigationController?.performNavigation(toPrevious: controller ?? self,
                                                shouldDismissModals: shouldDismissModals)
    }
}

然后,您需要将Home控制器的引用传递给所有下一个控制器(或将其存储在某个位置)。接下来,当需要时,可以调用homeViewController?.returnBackIfPossible()方法,该方法将关闭所有通道并重置导航堆栈。

票数 0
EN

Stack Overflow用户

发布于 2021-02-06 08:31:03

什么是非模态父级?

它是导航控制器推送的视图控制器吗?

如果发生这种情况,您必须从导航控制器中弹出视图控制器。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66069909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档