Unwind Segue - 将出口拖到哪里?

Posted

技术标签:

【中文标题】Unwind Segue - 将出口拖到哪里?【英文标题】:Unwind Segue - Where to Drag Exit? 【发布时间】:2015-12-01 05:12:17 【问题描述】:

我试图了解 unwind segue 是如何工作的。首先,我创建了 3 个 ViewController。

GlobalVC
 -LoginVC
 -RegisterVC 

我将初始页面设置为 GlobalVC(只有经过身份验证的用户才能看到)。我设置了一个segue:

GlobalVC to LoginVC 调用 globalToLoginLoginVC to RegisterVC 调用 loginToRegister。这是我的故事板:

对于 registerToLogin 方向,我使用了这个变通方法(在 RegisterVC 中),但看起来有点难看。

@IBAction func unwindToLogin(sender: AnyObject) 
    //Dismiss View
    dismissViewControllerAnimated(true, completion: nil)


但是,现在我尝试从LoginToGlobal 直接发送

首先,我选择了登录按钮,将其拖到 LoginVC:

@IBAction func loginButton(segue: UIStoryboardSegue) 
    performSegueWithIdentifier("unwindToGlobal", sender: self)

设置segue: UIStoryboardSegue 后,现在可以右键单击退出。但是,我在这里感到困惑。无论我试图将 Exit 内的圆圈拖到什么位置,都会出错:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,>原因:“接收方 (0x7fdd2068a480>) 与标识符“unwindToGlobal”没有任何关联”

我应该把圆圈拖到哪里? (我一直看到Unwind segue to 'Exit'

【问题讨论】:

这里已经完全解释过了。 ***.com/questions/12561735/…。我打算将其标记为重复,但我希望您首先确认该答案未涵盖的内容为您提供了发布新问题的有效理由 简单地说,必须在最后一个 VC 处绘制展开转场,即您试图退出的那个。 unwind 方法写在目标 VC 中,例如第一个VC。 我的问题是我看到“Unwind segue to 'Exit'”,我想我做错了什么,但我不知道是什么。当我右键单击 Exit 时,我看到了 segue,但无论我将它拖到什么位置,它都不会改变显示“Unwind segue to 'Exit'” 见Technical Note #2298。顺便说一句,与 NSNoob 与我们共享的链接中描述的不同,带有出口的栏现在位于 IB 中视图控制器的场景上方,而不是在其下方,如另一个答案所示,这是针对旧版本的 Xcode。 您的错误提示并非如此。您的 LoginVc 没有名为 unwindToGlobal 的此类 segue。 【参考方案1】:

展开动作方法在目标视图控制器中定义(例如在GlobalVC中)。

@IBAction func unwindToGlobal(segue: UIStoryboardSegue) 
     // this may be blank

然后,当您将按钮连接到此操作时,您不会拖到代码示例,而是拖到场景上方的“出口”图标:

有关更多屏幕快照,请参阅this answer。

【讨论】:

啊,所以我需要把unwind函数放在parentVC中。但是,故事板中的@IBAction 链接在哪里? 你根本没有钩住那个展开动作@IBAction代码。故事板会为您做到这一点。当您控制并拖动到该退出图标时,IB 查看父视图控制器的代码并找到带有UIStoryboardSegue 参数的@IBAction,然后将其作为选项呈现给您。您从一个小下拉列表中选择该操作,但您不会直接将按钮与展开操作@IBAction 代码挂钩。 IB 会为您做到这一点。 哦!我让它工作!谢啦!没有将 IBAction 分配给任何东西有点令人困惑。干杯

以上是关于Unwind Segue - 将出口拖到哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode - 标签栏项目视图中的标签出口为零

加载笔尖但未设置视图出口,找不到视图出口。

将 unwind segue 与 UISearchController 一起使用时出错

UINavigationController 的 Unwind Segue

如何以编程方式执行Unwind segue?

从 Unwind segue 触发时,Push segue 不起作用