Swift 4 - 如何从嵌套在 UICollectionViewCell 中的按钮以编程方式激活 segue
Posted
技术标签:
【中文标题】Swift 4 - 如何从嵌套在 UICollectionViewCell 中的按钮以编程方式激活 segue【英文标题】:Swift 4 - How to activate segue programmatically from button nested in UICollectionViewCell 【发布时间】:2018-01-15 01:46:06 【问题描述】:我正在尝试激活 UICollectionView、UIViewController 的子视图和单独的 ViewController(称为 RegisterController)之间的 segue。 CollectionView 都是以编程方式设置的,最后一个单元格上有一个按钮。但是,我不能执行典型的performSegue(_:withIdentfier)
,因为该按钮位于 CollectionView 中。所以,我在 ViewController 中设置了一个方法,将 CollectionView 保存到performSegue(_:withIdentifier)
。我在 CollectionViewController 中设置了一个实例来调用方法:
lazy var registerButton: UIButton =
let btn = UIButton(type: .system)
btn.setTitle("Don't have an account?", for: .normal)
btn.setTitleColor(lighterOrange, for: .normal)
btn.addTarget(self, action: #selector(registerScreenAppear), for: .touchUpInside)
return btn
()
@objc func registerScreenAppear()
let vc: ViewController = ViewController()
_ = vc.toRegister()
ViewController中的方法是
func toRegister()
performSegue(withIdentifier: "toRegister", sender: self)
我正在获取调用堆栈:
NSInvalidArgumentException', reason: 'Receiver (<audible.ViewController: 0x7fe780724770>) has no segue with identifier 'toRegister''
我知道我可能做错了什么,但我已经搜索和搜索,但找不到解决方案。任何帮助表示赞赏,谢谢
(是的,我已经配置了 segue 并在故事板中给了它一个标识符,但是我必须通过代码执行此操作的原因是因为 CollectionView 和按钮是以编程方式创建的,所以我不能使用 Interface Builder )
【问题讨论】:
在Storyboard中,按住键控,从ViewController拖一条线到RegisterController,创建一个名为“toRegister”的segue。 @YunCHEN 我已经做到了 您正在创建视图控制器的新实例,而不是引用现有实例。这个新实例没有链接到情节提要,因为您使用了一个简单的初始化程序来创建它。您需要使用委托或闭包。有关如何将单元格中的事件返回到视图控制器的一些想法,请参阅***.com/questions/28659845/… 【参考方案1】:在 registerScreenAppear 方法中调用performSegu
e 或调用self.toRegister()
like
@objc func registerScreenAppear()
self.toRegister()
或
@objc func registerScreenAppear()
performSegue(withIdentifier: "toRegister", sender: self)
注意:使用后面的一个,因为它会删除额外的函数调用,即 toRegister()。
【讨论】:
由于 registerScreenAppear 方法在 UICollectionViewCell 类中,perfromSegue(_:withIdentifier) 将给出“未解决的标识符使用”错误。 好的,你的问题,你可以移动 addTarget 行:“ btn.addTarget(self, action: #selector(registerScreenAppear), for: .touchUpInside) ”来查看控制器并在cellForItem方法中添加它在配置单元格时。并将相应的目标方法移动到视图控制器。以上是关于Swift 4 - 如何从嵌套在 UICollectionViewCell 中的按钮以编程方式激活 segue的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 4.1 和 xcode 9.3 中使用 JSONDecoder 解码嵌套的 JSON 数组和对象?
如何通过在 swift 中实现观察者从 Firebase 实时数据库中获取嵌套数据
如何使用viewForSupplementaryElementOfKind - swift显示UICollectionView的特定单元格