ios - 如何在 Swift 中完成 performSegue 后执行操作
问题描述
在 segue 快速完成后,是否有任何可能的方法来执行操作?
我正在调用此代码:
self.performSegue(withIdentifier: "showDamageReportSegue", sender: self)
segue 打开一个新的 ViewController 模式,在用户按下完成按钮后,我希望它继续运行下面的代码
self.performReservationEndingSequence() // which does some calls etc
有没有我想念completion handler
的?performSegue
我一直在寻找,但我找不到这个特定的问题。
解决方案
一个合理的解决方案是回调闭包。
在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() } }
推荐阅读
- javascript - 数据推入数组会覆盖值
- node.js - Vue|Nuxt - 将项目复制到生产服务器导致错误
- reactjs - 如何将边框底部放在reactjs中的react-chips?
- c# - 如何获得 Hyper-V VM 来宾操作系统
- ruby-on-rails - 如何访问哈希中的嵌套键
- julia - 使用 Julia 无法在 Atom 中打开调试器窗格
- arm - 带有 std::pair 的 API
在 ARM 上从 C++14 切换到 C++17 时中断? - json - 如何正确地将新密钥传递给 JSON 字典?
- matlab - 将面顶点网格导出到 STL
- javascript - 我想在我的代码中多次调用一个函数?