我可以将自定义 segue 用于非视觉目的吗?

Posted

技术标签:

【中文标题】我可以将自定义 segue 用于非视觉目的吗?【英文标题】:May I use a custom segue for non visual purpose? 【发布时间】:2016-02-11 20:49:56 【问题描述】:

我尝试使用自定义 segue 来配置目标控制器,以便传递数据和注入依赖项。

Using UIStoryboardSegue for purposes of injecting dependencies and passing data

这种方式将目标控制器和配置代码与源控制器分开。

但 Apple 的文档说“UIStoryboardSegue 对象负责在两个视图控制器之间执行视觉转换。”

我的使用方式正确吗?

【问题讨论】:

你想将数据传递给它,但不显示它? 【参考方案1】:

我想有很多方法可以解决这些问题。 Segue 是一种通过调用“prepareForSegue”方法来传递数据的好方法。不过,您不需要它来更改另一个控制器中的数据。如果您在视图控制器类的实例中有一些参数但没有显示它,您可以通过使用以下方式来引用它:

let resultViewController = storyboard?.instantiateViewControllerWithIdentifier("result") 
                           as! ResultViewController

在该代码中,“结果”是视图控制器的 ID。不需要segue。您可以为 UI 元素创建回调并调用此代码以获取对该视图控制器的引用。如果您不想转换视图,我认为这可能是一个更好的解决方案。

希望这会有所帮助,

【讨论】:

我在故事板中使用了这个 segue。我想知道注入和传递数据的最佳方式。我不想在源控制器中引用 DI 容器的汇编器。所以我认为这条路更好。但是因为苹果的文件,我没有信心。 你能多解释一下你正在使用的技术吗?只看大意有点让人迷惑。 segue 没有显示视图?是否完全以编程方式,没有情节提要? 我在情节提要上将 BundleSegue 设置为 segue 的类属性。 segue 将按钮连接到情节提要参考。当我点击按钮时,segue 执行注入和传播方法。在这些方法中,目标 VC 是注入依赖项,源 VC 将数据传递给目标 VC。最后目的地 VC 通过导航控制器的推送出现。 最后你将数据传递给目标视图控件然后它出现了吗?从我目前看到的情况来看,这看起来并不罕见。 segue 进行转换,但也允许您传递数据。 是的。与使用 prepareForSegue 相比,我也认为这很奇怪。但是通过这段代码sample.swift,我可以抽象出一个进程来使用协议传递数据,并且可以将进程与控制器分离。此外,我想将依赖项注入到不在源控制器中的目标控制器。如果您知道其他方式以便使用 segue 作为我的试用方式,请告诉我。

以上是关于我可以将自定义 segue 用于非视觉目的吗?的主要内容,如果未能解决你的问题,请参考以下文章

自定义展开 Segue

我可以通过 Segues 在视觉上完全“绕过”视图控制器吗?

如何将自定义项目添加到 QFileDialog?

将自定义图像(非 JPEG)保存到 iPhone 照片目录

我可以将自定义类转换为刀片 Laravel 中的变量吗

如何将自定义 tableView 搜索工具与 UISearchDisplayController 结合使用?