【问题标题】:UIViewController's delegate function which determines popUIViewController 的委托函数决定弹出
【发布时间】:2018-05-14 12:34:03
【问题描述】:

我在导航堆栈中有 3 个 ViewController,它们是 ViewControllerA、ViewControllerB 和 ViewControllerC。

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

我想检查我是如何到达 ViewControllerA 的,无论是通过弹回还是作为导航堆栈的 rootViewController。

【问题讨论】:

  • 添加您尝试过的代码。这个问题包含的信息要少得多,任何人都可以帮助你。
  • 你想做什么请说明

标签: ios swift uiviewcontroller uinavigationcontroller


【解决方案1】:

你可以给你的 backButton 一个 unwind 函数并在视图控制器中捕获它。

@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

【讨论】:

    【解决方案2】:

    制定协议:

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

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      相关资源
      最近更新 更多