我有主TabbarController,它包含ViewController(A(。 从这个 A 使用导航控制器推送另一个 ViewController(B?(。推送视图控制器 从 B 推送另一个 ViewController(C( 使用 navigationController?。推送视图控制器 从C模式呈现另一个ViewController(D(。 从D使用点击按钮时,它应该关闭D和popToRootView控制器。
我在谷歌上搜索了类似的问题,但还没有找到解决方案。
我该怎么做?
创建协议
protocol YourDelegate: class {
func didDismiss()
}
在视图控制器 D 中,创建对协议的弱引用
weak var delegate: YourDelegate?
在视图控制器 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)
最后,在视图控制器 D 中,在关闭函数闭包中,调用委托函数
self.dismiss(animated: true) {
self.delegate?.didDismiss()
}