我想将数据从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)
}
答案 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