考虑我们的Main.storyboard
SceneAViewController ---> SceneBViewController ---> SceneCViewController
SceneAViewController
有一个方法@IBAction func after_unwind(segue: UIStoryboardSegue)
SceneBViewController
有一个方法@IBAction func after_unwind(segue: UIStoryboardSegue)
Xcode如何确定要展开的Scene / ViewController?
答案 0 :(得分:2)
展开segues涉及从当前视图控制器导航的运行时进程,备份前面的视图控制器链,查找它遇到的具有相应名称的展开动作的第一个实例。这意味着它会解除最近发生的事件。
因此,如果您从视图控制器A
转到B
到C
,并且A
和B
具有相同名称的展开segue,当您使用该名称的展开segue从C
展开时,它会展开到B
,即最新的A
,而不是A
。
WWDC 2012视频Adopting Storyboards in Your App概述了向视图控制器链上行走的运行时过程。
以上讨论了展开动作名称的最佳选择问题。很容易跳到“只使用独特的展开动作名称”的结论,但我认为它比这更复杂。无论您使用唯一的展开动作名称还是公共/共享动作名称,都只是展开动作意图的问题。
例如,有时您想要一直放松回特定场景。在这种情况下,您将使用一些独特的展开动作名称。因此,在我们的B
»C
»A
示例中,unwindToA
可能会实现B
而unwindToB
可能会实现A
。< / p>
但请考虑用户可以从B
»D
»A
或C
»D
»{{1}导航的一些流程并且您希望D
根据情况放宽到B
或C
。在这种情况下,B
和C
可能会实施unwindFromD
操作。
我怀疑这种灵活性的需求促使Apple实现了这种“走向视图控制器链”的运行时进程而不是“寻找特定类的视图控制器”的方法
无论如何,选择唯一vs共享展开动作名称仅取决于您的特定用例。