【问题标题】:Trying to pass data from UICollectionViewCell to UIViewController试图将数据从 UICollectionViewCell 传递到 UIViewController
【发布时间】:2018-07-04 16:17:37
【问题描述】:

试图将数据从我的collectionViewCell 传递到另一个UIViewController,但由于某种原因数据未传递。下面是我在didSelectItem 方法中的代码和我想将数据传递到的ViewController。我正在尝试使用从我的集合视图单元格数据传递的文本填充标签,但它始终显示我在UIViewController 中分配的默认字符串“test”。使用 swift 4.1

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let destinationVC = storyboard?.instantiateViewController(withIdentifier: "CaseDetailViewController") as! CaseDetailViewController
        destinationVC.textPassedOver = MyCases[indexPath.section][indexPath.item]
        self.navigationController?.pushViewController(destinationVC, animated: true)
    }



// ViewController to pass data


class CaseDetailViewController: UIViewController {

    var textPassedOver = "test"

    @IBOutlet weak var label: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        label.text = textPassedOver

        print(textPassedOver)
       }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

【问题讨论】:

  • 通过打印 MyCases[indexPath.section][indexPath.item] 来检查是否选择了您是否收到任何值
  • 也接受 var textPassedOver : String?
  • @Dilip,是的,我确实检查并收到了 didselectitem 中的值,我可以在控制台中打印它。我观察到的问题是 CaseDetailViewController 的 viewdidload 中的打印语句首先执行,然后执行选择方法中的语句

标签: swift uiviewcontroller uicollectionview


【解决方案1】:

好的,我找到了解决方案。解决方法是我删除了 didSelectItemAt 并改用了 didHighlightItemAt 方法。这样我可以将所选 collectionviewCell 的数据传递给 viewcontroller。我发现uiviewcontroller的viewdidload方法只在didHighlightItemAt之后和didSelectItemAt方法之前调用的原因。

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 2020-10-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多