当你有多个 ViewController 调用它时,你如何使用 unwind segue

how do you use unwind segue when you have multiple ViewController that calls it

我最近开始学习 iOS/Swift 并且想知道如何使用 unwind segue。

假设以下视图控制器 A、B、C、E、F、X、BB、BBB

C -> A -> E
C -> B -> BB -> E
C -> B -> BBB -> E
C -> D -> E
F -> X -> E

如何使用 unwind segue 从 E 返回到 C 或 B 或 D?

注:在ViewControllerE中,只有一个Back按钮。

我尝试了以下解决方案:

// Add this method in C, B, and D view controller
@IBAction func unwindFromE(sender: UIStoryboardSegue) {}

这似乎有些工作原理,但为什么 F -> X -> E 又回到 C,即使在视图控制器 F/X 中没有 unwindFromE 方法。

正如您所发现的,您可以在多个 viewController 中实现展开目标 @IBAction,并且 iOS 将沿着调用链向上移动,直到找到一个。这允许 viewController E 到 return 给任何调用它的人,只要他们实现了目标函数 unwindFromE.

在调用堆栈为 F->X->EE 展开 returning 到 C 的情况下,当 CF 是由相同的 UITabBarController 控制的 viewController。由于 F 没有实现 unwindFromE,iOS 搜索由 UITabBarController 控制的其他 viewController。在您的情况下,它找到了 C 并切换到该选项卡。

有关 unwind segues 的更多信息,请参见 Technical Note TN2298: Using Unwind Segues