[英]Swift / pass data from UICollectionView to DetailView / Custom button
我有一个UICollectionView,并且想通过按自定义按钮来选择到DetailView。 我需要传递数据。
该按钮是可重用单元的一部分。
我使用以下代码获得SIGABRT(在let indexPath = sender as! NSIndexPath
)。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let indexPath = sender as! NSIndexPath
if segue.identifier == "showDetailasDetail" {
let vc = segue.destinationViewController as! InfoPopupVC
vc .currentEvent = posts[indexPath.row]
}
如果我let indexPath = sender as! NSIndexPath
执行segue let indexPath = sender as! NSIndexPath
let indexPath = sender as! NSIndexPath
和vc .currentEvent = posts[indexPath.row]
,我没有任何问题(但没有传递任何数据...)
非常感谢您的帮助。
DestinationViewController:
class InfoPopupVC: UIViewController {
var currentEvent: EventPosts?
@IBOutlet weak var infoPopupTitleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let title = currentEvent?.title
infoPopupTitleLabel.text = title
}
}
EventPosts结构:
struct EventPosts {
var title = ""
var imageUrl = ""
var url = ""
var date = ""
}
您正在尝试将sender
转换为NSIndexPath
,其中调用prepareForSegue:
的组件(或发件人)实际上是按钮。
一个快速修复方法是在collectionView(_:cellForItemAtIndexPath:)
设置UIButton
的tag
属性。 然后,您的方法将类似于以下内容:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let senderButton = sender as! UIButton
if segue.identifier == "showDetailasDetail" {
let vc = segue.destinationViewController as! InfoPopupVC
vc .currentEvent = posts[senderButton.tag]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.