快速/将数据从UICollectionView传递到DetailView/自定义按钮



我有一个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! NSIndexPathvc .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:) 中设置UIButtontag 属性。然后你的方法将类似于这样:

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]
        }
}

最新更新