使用带有情节提要参考的“Unwind Segue”时“没有标识符的segue”

Posted

技术标签:

【中文标题】使用带有情节提要参考的“Unwind Segue”时“没有标识符的segue”【英文标题】:"no segue with identifier" when using 'Unwind Segue' with a storyboard reference 【发布时间】:2019-02-18 20:21:34 【问题描述】:

我已按照说明 here 和 here 进行操作,这表明即使使用情节提要参考,我也应该能够创建展开/编辑转场。

流程很简单:

PhotoDetailScene 有一个对 EditHistoryScene 的故事板引用和一个点击手势来触发 segue,然后我在 EditHistoryScene 上有一个关闭按钮,可以展开返回 PhotoDetailScene。目前工作正常(自定义“显示”segue 打开 EditHistoryScene),如果我使用 dismiss() 调用它会很好地解散。但是使用 segue 标识符展开总是失败:

EditHistoryScene has no segue with identifier 'UnwindEditHistorySegue'

在我的 EditHistoryScene 关闭按钮操作中,我有:

func closeButtonPressed(_ sender: Any) 
    performSegue(withIdentifier: "UnwindEditHistorySegue", sender: self)

在我的 PhotoDetailScene 中,我添加了:

@IBAction func unwindToPhotoDetailScene(_ unwindSegue: UIStoryboardSegue) 
    print("It works!")

这是我在 IB 中设置它的方法,将 unwindToPhotoDetailScene() 方法连接到情节提要 reference(因为这是 IB 让我 ctrl+link 出口的唯一方法):

呈现转场:

展开 segue 属性(和 segue 名称)

为目标故事板正确设置了故事板参考:

故事板参考的出口点连接回 PhotoDetailScene:

EditHistoryScene 故事板实例似乎没有连接到@IBOutlet?

我最好的猜测是它失败了,因为这是一个故事板引用,并且展开转场是在 reference 上定义的,而不是实际的故事板实例。但我不知道如何将 EditHistoryScene 的退出点直接附加到 PhotoDetailScene。

【问题讨论】:

我试过这个;我刚刚将第一个故事板的故事板引用添加到第二个故事板。一旦我这样做了,我就可以从按钮按住 ctrl 并拖动到该按钮的视图控制器中的“退出”图标,并从弹出窗口中选择我的展开功能。不需要任何代码,也不需要命名任何segues。 啊!做得很好。想要对此进行扩展并将其添加为答案?我会接受的。 【参考方案1】:

您不需要为引用本身创建任何 segue。

一旦您的第二个故事板包含对第一个故事板的引用,则第一个故事板中定义的任何展开函数都可用。

您可以通过从退出触发器拖动到视图控制器场景中的退出图标来创建退出转场。

如果您想从“关闭”按钮触发展开,只需从关闭按钮按住 ctrl 并拖动到其视图控制器顶部的“退出”图标,您将看到 unwindToPhotoDetailScene 作为选项。

如果你想以编程方式触发它,你只需要给 segue 一个标识符。

例如,您可能希望关闭按钮上的操作处理函数检查是否有未保存的更改。如果有,提示用户确认他们将丢失他们的更改(或保存或其他)。一旦他们乐于继续,您就可以调用 unwind。

要设置它,从视图控制器对象按住 ctrl 并拖动到它自己的退出图标。创建 unwind segue 并给它一个标识符。

【讨论】:

以上是关于使用带有情节提要参考的“Unwind Segue”时“没有标识符的segue”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 以编程方式创建一个 unwind segue

Unwind Segue 在 iOS 8 中不起作用

以编程方式执行 unwind segue

在单元测试中以编程方式执行 Unwind Segue

无法以编程方式执行 unwind segue

如何在没有动画的情况下执行 unwind segue?