当你有多个视图控制器调用取消展开(segue)时,如何使用取消展开(segue)?

3

我最近开始学习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?
注意:在 ViewController E 中,只有一个“返回”按钮。
我尝试了以下解决方案:
// Add this method in C, B, and D view controller
@IBAction func unwindFromE(sender: UIStoryboardSegue) {}

这似乎在某种程度上起作用了,但为什么对于 F -> X -> E,即使在视图控制器 F/X 中没有 unwindFromE 方法,它也会回溯到C

C和F是同一个TabBarController中的两个视图控制器吗? - vacawama
@vacawama 是的。C/F 两者都在同一个 TabBarController 中。 - XivL
1个回答

1
正如您发现的那样,您可以在多个视图控制器中实现 unwind 目标 @IBAction,iOS 将沿着调用链向上查找,直到找到一个。这允许视图控制器 E 返回给调用它的任何人,只要他们实现了目标函数 unwindFromE
在您的情况下,当调用堆栈为 F->X->E 时,您的 E unwind 返回到 C,这发生在 CF 是由同一个 UITabBarController 控制的视图控制器的情况下。由于 F 没有实现 unwindFromE,因此 iOS 搜索由 UITabBarController 控制的其他视图控制器。在您的情况下,它找到了 C 并切换到该选项卡。
关于unwind segues的更多信息,请参见Technical Note TN2298: Using Unwind Segues

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接