我在导航堆栈中有3个ViewControllers,它们是ViewControllerA,ViewControllerB& ViewControllerC。
当我从ViewControllerB按回按钮时,我到达ViewControllerA。
我想查看我是如何通过Popping返回或作为导航堆栈的rootViewController访问ViewControllerA的。
答案 0 :(得分:0)
你可以给你的backButton一个展开函数并在视图控制器中捕获它。
@IBAction func unwindToView(unwindSegue: UIStoryboardSegue) {
if let XControllerView = unwindSegue.sourceViewController as? XController {
print("Coming from XControllerView")
}
else if let YControllerView = unwindSegue.sourceViewController as? YController {
print("Coming from YControllerView")
}
}
有关展开的更多信息:https://developer.apple.com/documentation/uikit/uiviewcontroller/1621473-unwind
答案 1 :(得分:0)
制定协议:
protocol DismissProtocol{
func dismissPresentedViewControllerComplete()
}
我们将使viewControllerA符合此协议。
在ViewControllerB中创建一个DismissProtocol类型的属性。
class ViewControllerB: UIViewController{
var delegate: DismissProtocol?
//............
}
当您展示ViewControllerB时,请将ViewControllerA指定为委托。
class SecondController: UIViewController{
var delegate: DismissProtocol?
覆盖ViewControllerA中的协议方法:
extension ViewControllerA: DismissProtocol{
func dismissPresentedViewControllerComplete() {
// Do what you want to do when you return from ViewControllerB
}
}
现在,在ViewControllerB的解除完成中,执行此覆盖方法:
self.dismiss(animated: false) {
self.delegate?.dismissPresentedViewControllerComplete()
}