我的应用的导航流程看起来有点像这样:
UINavigationController - MasterViewController> DetailViewController> InfoViewController
MasterViewController包含以下方法:
@IBAction func unwindToMaster(with segue: UIStoryboardSegue) {}
在DetailViewController中,有一个类似的方法:
@IBAction func unwindToDetail(with segue: UIStoryboardSegue) {}
我使用这些方法以及UIButtons来允许用户前进和后退导航层次结构。在界面构建器中,当我右键单击"退出"时,我在DetailViewController下看到了该方法。在InfoViewController中,但是当我右键单击"退出"在DetailViewController中,没有列出其他展开的段。
我已经咨询了多个在线资源(Ray Wenderlich,相关的StackOverflow问题),指导在界面构建器中生成展开segue的正确方法,但这些都没有帮助解决问题。现在,我首先需要帮助搞清楚问题是什么。随着发展的进行,它可能会让我看起来像是方形的东西。
我使用Swift 3运行Xcode 8.1。谢谢。
答案 0 :(得分:9)
重新迭代:不仅要将故事板Unwind Segue的Action放在与class
定义相同的源文件中,还要放置到(目标)View Controller(例如@IBAction func prepareForUnwind(segue: UIStoryboardSegue)
},在"呈现分段"列表中检测为prepareForUnwind[With]Segue
,但视图控制器在任何辅助源文件中都不能包含任何扩展名。您必须将class
定义和所有扩展合并到一个源文件中。
(从Xcode 8.2.1开始。)
答案 1 :(得分:4)
就我而言,我的视图控制器中有一个复杂的继承,这就是Interface Builder没有看到我放松的原因。所以这个解决方法对我很有用:
YouCollViewController.swift
文件并删除视图控制器在视图控制器声明中实现的所有类,协议,泛型等UIViewController
unwind
联系起来,它应显示在展开列表中YouCollViewController.swift
文件并放弃所有更改答案 2 :(得分:3)
我咨询了Apple的开发人员库(特别是页面"Using Unwind Segues")。在那里,展开动作的示例定义是:
@IBAction func unwindToMainMenu(sender: UIStoryboardSegue) {
let sourceViewController = sender.sourceViewController
// Pull any data from the view controller which initiated the unwind segue.
}
在我的代码中应用此示例,我将展开操作声明更改为:
@IBAction func unwindToMaster(sender: UIStoryboardSegue) {
print("Unwinded to master.")
}
和
@IBAction func unwindToDetail(sender: UIStoryboardSegue) {
print("Unwinded to detail.")
}
我还确保每个方法都包含在与MasterViewController的类声明相同的文件中。经过进一步测试,我发现MasterViewController的所有扩展都必须存在在同一个文件中,以便界面构建器找到并识别展开segue。
现在,在故事板中,退出菜单显示两个展开的细分。我的结论是,通过摆弄方法的位置以及如何声明它们,可以找到界面构建器可以识别的配置。我希望将来不那么敏感,因为我目前的方法组织很长很难以导航。
答案 3 :(得分:0)
因为这些答案都没有帮助我,而且我也不想把我的代码弄得那么多。在这里你可以尝试另一种解决方案。
从已经将展开功能添加到MasterViewController的那一刻开始。
首先,我继续向我的故事板添加一个新的ViewController,以及一个类型为UIViewController的新Cocoa Touch类文件,并将其与我的Storyboard连接(我称之为HelperViewController)。
然后你可以添加相同的展开功能,你已经将MasterVC内部添加到新创建的HelperVC中。
@IBAction func unwindToMaster(with segue: UIStoryboardSegue) {}
现在将Helper连接到DetailVC。你的故事板应该看起来有点像我的。如果你按住Ctrl +拖放到DetailVC的出口,你应该得到与我相同的选项。建立连接并将鼠标悬停在新创建的segue上时,应突出显示Master和HelperVC。现在,您可以再次删除HelperVC,一切都应该按预期工作。
我希望有所帮助!
答案 4 :(得分:0)
使用swift 4 XCode 9.2,我发现你需要将引用从viewController顶部的黄色图标拖到左侧详细信息面板中目标viewController的“Exit”引用。希望这有帮助!
答案 5 :(得分:0)
有时XCode重新启动会使操作出现。