使用情节提要在 Xcode 6.1.1 中展开 Segue

Posted

技术标签:

【中文标题】使用情节提要在 Xcode 6.1.1 中展开 Segue【英文标题】:Unwind Segue in Xcode 6.1.1 with storyboard 【发布时间】:2014-12-04 13:45:33 【问题描述】:

我一直在读到 unwind segue 在 Xcode 6 中存在错误。我使用的是 Xcode 6.1.1,我使用的是 swift。

我使用导航控制器放置的“返回”按钮。因此我无法控制拖动到退出图标。此外,我也不能从 viewController 图标拖动到退出图标。

这是一个错误吗?否则我缺少一些关于如何使用 unwind segue 的基本知识。 如何从情节提要中设置展开转场?

【问题讨论】:

【参考方案1】:

我想提供一个详细的答案:

要执行展开转场,请转到要转场的视图控制器并添加以下函数; (名字当然可以改)

@IBAction func unwindToMainMenu(segue: UIStoryboardSegue) 


添加此功能后,您将能够从情节提要上的任何视图控制器中看到此展开功能。只需右键单击任何视图控制器顶部的退出图标即可。

如果您想使用按钮执行展开,那么您可以 cntrl + 从按钮拖动以退出图标并选择您的 unwindSegue 功能。完成!

如果您想以编程方式执行展开,则 cntrl + 从 viewController 图标拖动到退出图标并选择展开功能。

之后,打开 Document Outline 并点击 unwind segue。

转到 Utilities 中的 Attributes Inspector 并为您的 unwind segue 提供一个标识符。

最后,像下面这样调用performSegueWithIdentifier函数;

self.performSegueWithIdentifier("goToMainMenu", sender: self)

希望对您有所帮助!

【讨论】:

太棒了 :) 干得好。【参考方案2】:

搞定了。如果您从 NavigationController 或 TabBarController 呈现(不确定 TabBarController),则需要将导航控制器子类化并添加 unwind segue。在情节提要中不要忘记更改导航控制器的类。我的视图层次结构是 NavController -> TableController -> DetailController。将方法添加到自定义 NavBar 类后,将其添加到要返回的 VC。然后,您将能够按 ctrl-drag 退出。我认为这是一个错误,因为一旦连接上它,我就能够删除子类并返回到库存 NavigationController 并且它仍然有效。

【讨论】:

我在没有自定义 navigationController 类的情况下尝试过,但仍然有效。显然,在目标视图控制器上添加@IBAction func unwindSegue(segue: UIStoryboardSegue) 可以使拖动退出图标 你也可以试试吗?如果可行,最好将其写为答案。 我的错,我以为你已经这样做了。您总是必须在目标 VC 中声明展开,而不是在当前 VC 中,以便 ctrl-drag 退出。但对我来说,我必须继承我的导航控制器才能拖入 IB。并在目标VC和自定义NavVc中声明。 是的,到目前为止我一直使用导航栏按钮。我将使用展开来实际传递数据。非常感谢您的努力! 没问题。只是一个抬头。如果您尝试传递对象,则可能必须使用临时容器。即,如果您想用来自原始 VC 的文本填充标签,则不能将其直接放入目标 VC 标签中。您必须在目标 VC 中声明一个字符串属性和一个标签属性并将其存储在其中。比在 viewDidLoad 中使用目标字符串实例化目标标签。【参考方案3】:

让它在 Xcode 6.2 上运行。我的情况是 ViewController A 以模态方式呈现 B。展开以下设置步骤:

    在A中,写一个IBAction

    -(IBAction)unwindFromB:(UIStoryboardSegue *) unwindSegue 
    
      ViewControllerB *vc = [unwindSegue sourceViewController];
      // get whatever data you want to pass back from B
    
    

    在 storyboard 中,找到 B 并右键单击顶部的“退出”按钮,然后“Presenting Segue”菜单将列出您刚刚在 A 中创建的 unwindFromB

    点击右侧的小“+”号并链接回B,选择“手动”

    如果您需要以编程方式调用它,请不要忘记设置展开 segue 的标识符。

【讨论】:

【参考方案4】:

我发现我无法将从 UITableViewCell 拖到 Storyboard 上的 View Controller 上的 Exit 对象。

解决方案是首先在代码中添加适当的 IBAction。一旦 IBAction 存在,拖动目标就会亮起。

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue 


【讨论】:

以上是关于使用情节提要在 Xcode 6.1.1 中展开 Segue的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在情节提要中定义“通用”展开转场?

Xcode 在情节提要中使用推送通知打开特定视图

有没有办法在 Xcode 7 的两个不同窗口中打开和查看情节提要?

Xcode 选项卡栏项目在情节提要中不可见

当我使用自动布局移动视图时,为啥 XCode 5 没有在情节提要中添加约束

使用情节提要 xcode 6 在 vi​​ewController 中调整内容