首页 > 解决方案 > 如何在 Swift 中完成 performSegue 后执行操作

问题描述

在 segue 快速完成后,是否有任何可能的方法来执行操作?

我正在调用此代码:

self.performSegue(withIdentifier: "showDamageReportSegue", sender: self)

segue 打开一个新的 ViewController 模式,在用户按下完成按钮后,我希望它继续运行下面的代码

self.performReservationEndingSequence() // which does some calls etc

有没有我想念completion handler的?performSegue我一直在寻找,但我找不到这个特定的问题。

标签: iosswiftxcode

解决方案


一个合理的解决方案是回调闭包。

  • showDamageReportSegue控制器中添加回调属性

    var callback : (() -> Void)?
    
  • showDamageReportSegue控制器callback中调用viewDidDisappear

    override func viewDidDisappear(_ animated : Bool) {
        super.viewDidDisappear(animated)
        callback?()
    }
    

    或在任何其他任意位置。

  • 在第一个视图控制器中实现prepare(for并设置回调

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
       guard segue.identifier == "showDamageReportSegue" else { return }
       let destination = segue.destination as! ShowDamageReportController // change that to the real class
       destination.callback = {
           self.performReservationEndingSequence() 
       }
    }
    

推荐阅读