我有一个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,我没有任何问题(但没有传递任何数据......
非常感谢帮助。
目的地视图控制器:
class InfoPopupVC: UIViewController {
var currentEvent: EventPosts?
@IBOutlet weak var infoPopupTitleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let title = currentEvent?.title
infoPopupTitleLabel.text = title
}
}
事件帖子结构:
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]
}
}