问题标签 [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.
segue - 无法连接@IBSegueAction
我有一个UIButton
包含以下代码的单视图控制器:
根据Apple 的文档,这是 a 的正确签名@IBSegueAction
,并且可以编译,但是我无法@IBSegueAction
通过从情节提要场景拖动到助手编辑器来将按钮连接到。
我可以毫无问题地连接到其他渠道或行动。
有什么想法吗?Xcode 11 错误还是我做错了什么?
更新
简而言之,Apple 的文档说……</p>
在源视图控制器上创建从 segue 到 @IBSegueAction 方法的连接。在支持 Segue Actions 的新 OS 版本上,将调用该方法……IBSegueAction 方法最多需要三个参数:编码器、发送者和 segue 的标识符。第一个参数是必需的,如果需要,可以从方法的签名中省略其他参数
我无法完成第一步(创建连接)
swift - @IBSegueAction 有条件
在我的应用程序中,我想执行基于 UITapGestureRecognizer 的 segue。如果点击位于屏幕的顶部区域,则应执行对 SettingsView 的 segue。
在 UIKit 中,这非常简单。我通过将它包装在一个 if 语句中触发了 UITapGestureRecognizer 中的 performSegue。
现在我想在 SwiftUI 中编写 SettingsView()。SettingsView() 将嵌入在 UIHostingController 中。
我的问题是:我怎样才能对这个 UIHostingController 执行 segue(同时告诉 UIHostingController 要显示哪个视图)?
我尝试使用新的@IBSegueAction。使用这个@IBSegueAction 的原因是我可以用它来告诉 UIHostingController 要显示哪个视图。问题是我现在不能插入条件。无论点击屏幕上的哪个位置,都会执行 segue。我还没有找到在@IBSegueAction 中取消segue 的方法。
我的代码目前如下所示:
目前的结果是,当点击错误的区域时,应用程序会转到不存在的 Nil 视图。
ios - 将 @IBSegueAction 与 UINavigationController 一起使用
感谢AD Progress 在下面的出色研究和回答,我终于弄清楚了IBSegueAction
s 是怎么回事。
如果你将一个rootViewController
segue(或任何其他类型,大概)连接到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 PersonViewController
inside aUINavigationController
为避免在 中包含可选项Person
,PersonViewController
我尝试使用IBSegueAction
s.
我的第一个想法是我需要一个用于 thePeopleViewController
和 the之间的 segue 以及 the和PersonNavController
the 之间的 segue如下......</p>
PersonNavController
PersonViewController
事实证明,这里的问题是,即使您可以将转场动作连接到 aUINavigationController
和 its之间的转场rootViewController
,它也不会被触发,因为在上面的示例中,super.init(coder: coder)
inPersonNavController
调用 PersonViewController.init(coder: NSCoder)
(未实现) .
关于如何让这个工作的任何想法?
uistoryboard - 如何将 @IBSegueAction 与 UITabBarController 一起使用?
我有一个带有两个标签的标签栏。为了避免在视图控制器中有选项,我尝试使用@IBSegueAction
.
我初始化标签栏控制器:
我从标签栏控制器类初始化两个视图控制器:
这是视图控制器之一:
而不是使用我的初始化程序 Xcode 是使用默认的。错误信息是:
[Storyboard] Unable to find method -[(null) instantiateFirstViewControllerWithCoder:]
编辑:我在 GitHub 上上传了完整的演示项目:演示项目