获取collectionView单元格的indexPath

时间:2016-12-12 15:33:42

标签: ios uicollectionview

我想将数据从collectionView单元格传递到另一个视图控制器。我走到这一步,但我被卡住了。基本上,我想将我的collectionView单元格内的标签文本传递给另一个视图控制器的标签。下面的代码不起作用。我想我需要添加一些代码,告诉我们哪个单元格已被挖掘。顺便说一句,当我将此行viewController.dataLabelObject = valueToPass更改为此viewController.dataLabelObject = "Hello"时,我可以在另一个控制器上看到它

var valueToPass: String!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.identifier == "mySegue"
        {
            let viewController = segue.destination as! AnimalsViewController1
            viewController.dataLabelObject = valueToPass
        }
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
    {
        let currentCell = myCollectionView.cellForItem(at: indexPath) as! CollectionViewCell1
        valueToPass = currentCell.textLabel.text


        performSegue(withIdentifier: "mySegue", sender: self)
    }

2 个答案:

答案 0 :(得分:0)

你需要调整自己的想法。单元格不存储数据,它们呈现数据并从用户收集输入。

不是尝试从用户点击的单元格中提取数据,而是获取所选单元格的索引路径并查找数组中的数据。同时添加打印语句以确定发生了什么:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
    valueToPass = myArray[indexPath.row]
    print("In \(#function), valueToPass = \(valueToPass)")
    performSegue(withIdentifier: "mySegue", sender: self)
}

然后将该数据传递到目标视图控制器:

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "mySegue"
    {
        let viewController = segue.destination as! AnimalsViewController1
        print("In \(#function), valueToPass = \(valueToPass)")
        viewController.dataLabelObject = valueToPass
    }
}

在目标视图控制器中添加一个print语句,以便在加载时记录dataLabelObject的值。

答案 1 :(得分:-1)

你做错了。首先,你不应该从标签传递数据,如果你在控制器中存储字符串会更好:

var strings: [Strings]!

然后,当您选择单元格时,将indexPath作为sender传递:

performSegue(withIdentifier: "mySegue", sender: indexPath)

准备segue:

let indexPath = segue.sender as! IndexPath
let string = strings[indexPath.item]
viewController.dataLabelObject = string