问题标签 [ibsegueaction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
753 浏览

segue - 无法连接@IBSegueAction

我有一个UIButton包含以下代码的单视图控制器:

根据Apple 的文档,这是 a 的正确签名@IBSegueAction,并且可以编译,但是我无法@IBSegueAction通过从情节提要场景拖动到助手编辑器来将按钮连接到。

我可以毫无问题地连接到其他渠道或行动。

有什么想法吗?Xcode 11 错误还是我做错了什么?


更新

简而言之,Apple 的文档说……</p>

在源视图控制器上创建从 segue 到 @IBSegueAction 方法的连接。在支持 Segue Actions 的新 OS 版本上,将调用该方法……IBSegueAction 方法最多需要三个参数:编码器、发送者和 segue 的标识符。第一个参数是必需的,如果需要,可以从方法的签名中省略其他参数

我无法完成第一步(创建连接)

0 投票
1 回答
539 浏览

swift - @IBSegueAction 有条件

在我的应用程序中,我想执行基于 UITapGestureRecognizer 的 segue。如果点击位于屏幕的顶部区域,则应执行对 SettingsView 的 segue。

在 UIKit 中,这非常简单。我通过将它包装在一个 if 语句中触发了 UITapGestureRecognizer 中的 performSegue。

现在我想在 SwiftUI 中编写 SettingsView()。SettingsView() 将嵌入在 UIHostingController 中。

我的问题是:我怎样才能对这个 UIHostingController 执行 segue(同时告诉 UIHostingController 要显示哪个视图)?

我尝试使用新的@IBSegueAction。使用这个@IBSegueAction 的原因是我可以用它来告诉 UIHostingController 要显示哪个视图。问题是我现在不能插入条件。无论点击屏幕上的哪个位置,都会执行 segue。我还没有找到在@IBSegueAction 中取消segue 的方法。

我的代码目前如下所示:

目前的结果是,当点击错误的区域时,应用程序会转到不存在的 Nil 视图。

0 投票
3 回答
2249 浏览

ios - 将 @IBSegueAction 与 UINavigationController 一起使用

感谢AD Progress 在下面的出色研究和回答,我终于弄清楚了IBSegueActions 是怎么回事。

如果你将一个rootViewControllersegue(或任何其他类型,大概)连接到IBSegueAction它的 中UINavigationContoller,但它没有在那里找到它,它会查看响应者链上的下一个视图控制器,直到找到IBSegueAction具有正确签名的一个。如果找不到,它会调用init(with coder: NSCoder). rootViewController如果只有那被记录在某个地方……</p>


笔记

注意:这是一个说明问题的最小示例 - 如何在UINavigationController使用IBSegueAction. 我知道这不是您通常呈现详细视图的方式。

注 2:我知道如何使用 segues 和prepare(for segue: UIStoryboardSegue). 我想知道如何在UINavigationController使用IBSegueAction

注 3:我知道如何使用IBSegueAction不包含在视图控制器中的视图控制器UINavigationController(例如推送导航堆栈)


原始问题

我有以下设置……</p>

在此处输入图像描述

中的人员列表UITableViewController。点击 aPersonCell会呈现 a PersonViewControllerinside aUINavigationController

为避免在 中包含可选项PersonPersonViewController我尝试使用IBSegueActions.

我的第一个想法是我需要一个用于 thePeopleViewController和 the之间的 segue 以及 the和PersonNavControllerthe 之间的 segue如下......</p> PersonNavControllerPersonViewController



事实证明,这里的问题是,即使您可以将转场动作连接到 aUINavigationController和 its之间的转场rootViewController,它也不会被触发,因为在上面的示例中,super.init(coder: coder)inPersonNavController调用 PersonViewController.init(coder: NSCoder)(未实现) .

关于如何让这个工作的任何想法?

0 投票
3 回答
414 浏览

uistoryboard - 如何将 @IBSegueAction 与 UITabBarController 一起使用?

我有一个带有两个标签的标签栏。为了避免在视图控制器中有选项,我尝试使用@IBSegueAction.

带有两个选项卡的选项卡栏

我初始化标签栏控制器:

我从标签栏控制器类初始化两个视图控制器:

这是视图控制器之一:

我将segues连接到相应@SegueAction的s: @SegueAction 设置

我的问题是,当我运行项目时,我遇到了这个崩溃: 致命错误

而不是使用我的初始化程序 Xcode 是使用默认的。错误信息是: [Storyboard] Unable to find method -[(null) instantiateFirstViewControllerWithCoder:]

编辑:我在 GitHub 上上传了完整的演示项目:演示项目