0

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

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

我怎样才能做到这一点?

4

1 回答 1

1

创建协议

protocol YourDelegate: class {
    func didDismiss()
}

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

weak var delegate: YourDelegate?

在 ViewController C 中,符合协议和函数中的 popToRootVC

extension ViewControllerC: YourDelegate {
    func didDismiss() {
        self.navigationController?.popToRootViewController()
    }
}

同样在 ViewController C 中,将 ViewControllerD 的委托设置为您展示 VC 的 self

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

最后,在 ViewController D 中,在您的关闭函数闭包中,调用委托函数

self.dismiss(animated: true) {
    self.delegate?.didDismiss()
}
于 2020-07-01T09:26:19.040 回答