[英]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.