簡體   English   中英

獲取collectionView單元格的indexPath

[英]Getting the indexPath of collectionView cells

我想將數據從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)
    }

您需要調整自己的想法。 單元格不存儲數據,它們提供數據並收集用戶的輸入。

與其嘗試從用戶點擊的單元格中提取數據,不如獲取所選單元格的索引路徑並在數組中查找數據。 沿途還添加打印語句,以了解發生了什么事情:

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

在目標視圖控制器中添加一條打印語句,以記錄dataLabelObject加載時的值。

您做錯了。 首先,您不應該傳遞標簽中的數據,如果將字符串存儲在控制器中會更好:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM