我有一个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
和vc .currentEvent = posts[indexPath.row]
的segue,我就没有任何问题(但没有传递任何数据......)
非常感谢帮助。
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:
struct EventPosts {
var title = ""
var imageUrl = ""
var url = ""
var date = ""
}
答案 0 :(得分:1)
您尝试将sender
转换为NSIndexPath
,其中调用prepareForSegue:
的组件(或发件人)实际上是按钮。
快速解决方法可能是在tag
中设置UIButton
的{{1}}属性。然后你的方法看起来像这样:
collectionView(_:cellForItemAtIndexPath:)