unwind segues如何区分不同类中具有相同名称的目标?

时间:2018-02-24 03:04:52

标签: ios swift xcode

考虑我们的Main.storyboard

SceneAViewController ---> SceneBViewController ---> SceneCViewController

SceneAViewController有一个方法@IBAction func after_unwind(segue: UIStoryboardSegue)

SceneBViewController有一个方法@IBAction func after_unwind(segue: UIStoryboardSegue)

Xcode如何确定要展开的Scene / ViewController?

enter image description here

1 个答案:

答案 0 :(得分:2)

展开segues涉及从当前视图控制器导航的运行时进程,备份前面的视图控制器链,查找它遇到的具有相应名称的展开动作的第一个实例。这意味着它会解除最近发生的事件。

因此,如果您从视图控制器A转到BC,并且AB具有相同名称的展开segue,当您使用该名称的展开segue从C展开时,它会展开到B,即最新的A,而不是A

WWDC 2012视频Adopting Storyboards in Your App概述了向视图控制器链上行走的运行时过程。

以上讨论了展开动作名称的最佳选择问题。很容易跳到“只使用独特的展开动作名称”的结论,但我认为它比这更复杂。无论您使用唯一的展开动作名称还是公共/共享动作名称,都只是展开动作意图的问题。

例如,有时您想要一直放松回特定场景。在这种情况下,您将使用一些独特的展开动作名称。因此,在我们的B»C»A示例中,unwindToA可能会实现BunwindToB可能会实现A。< / p>

但请考虑用户可以从B»D»AC»D»{{1}导航的一些流程并且您希望D根据情况放宽到BC。在这种情况下,BC可能会实施unwindFromD操作。

我怀疑这种灵活性的需求促使Apple实现了这种“走向视图控制器链”的运行时进程而不是“寻找特定类的视图控制器”的方法

无论如何,选择唯一vs共享展开动作名称仅取决于您的特定用例。