UIViewController的委托函数决定pop

时间:2018-05-14 12:34:04

标签: ios swift uiviewcontroller uinavigationcontroller

我在导航堆栈中有3个ViewControllers,它们是ViewControllerA,ViewControllerB& ViewControllerC。

当我从ViewControllerB按回按钮时,我到达ViewControllerA。

我想查看我是如何通过Popping返回或作为导航堆栈的rootViewController访问ViewControllerA的。

2 个答案:

答案 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()
    }