如何关闭 viewcontroller 并弹出到 root viewcontroller swift?

How to dismiss viewcontroller and pop to root viewcontroller swift?

我有主要的 TabbarController,其中包含 ViewController(A)。 从这个 A 推另一个 ViewController(B) 使用 navigationController?.pushViewController 从 B 推另一个 ViewController(C) 使用 navigationController?.pushViewController 从 C 模态地呈现另一个 ViewController(D)。 从 D 使用点击按钮时,它应该关闭 D 和 popToRootViewController .

我用谷歌搜索了类似的问题,但还没有找到解决方案。

我该怎么做?

创建协议

protocol YourDelegate: class {
    func didDismiss()
}

在ViewControllerD中,创建对协议的弱引用

weak var delegate: YourDelegate?

在ViewControllerC中,在函数

中符合协议和popToRootVC
extension ViewControllerC: YourDelegate {
    func didDismiss() {
        self.navigationController?.popToRootViewController()
    }
}

同样在 ViewController C 中,将 ViewControllerD 的委托设置为您呈现 VC

的自我
//example:
let vcD = ViewControllerD()
vcD.delegate = self
self.navigationController.pushViewController(vcD, animated: true)

最后,在ViewControllerD中,在你的dismiss函数闭包中,调用delegate函数

self.dismiss(animated: true) {
    self.delegate?.didDismiss()
}