将 segue 展开到以编程方式指定的 unwindSegue不带 Storyboard

问题描述

在查看了类似问题的许多答案后,我仍然没有答案,例如。 https://stackoverflow.com/questions/12509422/how-to-perform-unwind-segue-programmatically

我想尝试重申“以编程方式”对我提出的问题意味着什么。

所有解决方案都显示使用情节提要并使用某些视图控制器中定义的展开方法连接视图控制器“退出”。这有效,但不是以编程方式,而是通过 Xcode 工具的使用直接连接。确保准备方法以编程方式参与最后的步骤。

我的挑战是我使用 Cocoapods 作为一个可重用的库,故事板无法知道这个库的用户。因此他们无法连接到放松方法,因为目前还没有。

我想使用语言通用功能来指定展开方法以编程方式(Swift 或 Objective-C)。

unwind 方法也可能在另一个包中,使事情进一步复杂化。

注意:假设可以通过 UIStoryboardSegue 对象(具有 unwindAction)以编程方式更改视图控制器名称的值,那么创建占位符 unwind 就可以了。

感谢您的任何见解。

更新答案(它不会让我回答) 首先,我的回答涉及澄清原始问题,特别是“没有 storboard”声明。这是为了“展开”到未通过故事板指定的 ViewController,特别是该库的新用户。我的回答表明我可以做到这一点,但仍然需要一个故事板(只是不适用于这个新的 ViewController)。

我的问题确实表明可以通过故事板创建占位符展开。

注意:假设可以通过 UIStoryboardSegue 对象(具有 unwindAction)以编程方式更改视图控制器名称的值,那么创建占位符 unwind 就可以了。

所以我的回答可以调用未通过 Xcode 用户界面指定的代码(这是通过拖动到“退出”连接到命名展开的 UI 过程)。

我(错误地)假设这是连接到我的 unwind 方法(例如 unwindFromHelp),就像在代码中将按钮连接到 IBAction 一样。相反,它会动态连接到运行时层次结构中与该名称匹配的任何内容

答案的关键见解来自 What are Unwind segues for and how do you use them?,其中 @shawkinaw 指出:

换句话说,将 展开 操作视为描述 segue 的来源,而不是它要去的地方。

这也意味着同一个 unwind 方法名可以有很多实现!在运行时,ViewController 层次结构会跟踪它在此过程中遇到的展开方法调用 Segue Unwind 将展开到它找到的第一个方法

基于这种新理解,我可以通过创建一个占位符 unwind 来在未来的某个 ViewController 中调用 unwind 方法,该占位符 unwind 是通过 Xcode 退出方法手动添加的。该操作显示了当时可用的所有展开方法

因此解决方案涉及使用情节提要和(可能)未使用的 ViewController,其中定义了一个 unwind 方法。然后所需的 ViewController 的出口通过 Xcode 连接到那个 unwind。

未来的用户还可以在新代码(例如unwindFromHelp)中定义相同的展开方法,如果 ViewHierarchy 运行时堆栈没有其他展开匹配,则执行他们的代码。因此,这种委托方法解决了我最初的问题,即未来的用户必须为委托提供一个实现(这是一个展开方法名称,例如 unwindFromHelp)。>

我编写了一个示例,展示了如何实现这一点,并根据它如何到达不同的 ViewControllers 返回:github UnwindExample

示例流程图基于 A or B calling Help idea

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)