我正在尝试将包含在集合视图单元格中的标签发送到另一个带有segue的视图控制器。
我的计划是当用户点击集合视图单元格时,应用程序会转到下一个视图控制器,其中导航栏的标题显示所选集合视图单元格中标签的文本。
我试过这个:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CCCollectionViewCell
//itemSelected = items[indexPath.row] as String
itemSelected = cell.pLabel.text!
print(itemSelected)
}
并且在prepareForSegue中我没有编写任何代码,因为我不确定它是如何工作的。
我将块'..items [indexPath.row]注释掉为String',因为它不显示标签并添加了print函数以查看输出内容,但它只输出storyboard中给出的名称。 / p>
我是Xcode的新手,所以我不熟悉didSelect和prepareForSegue。我要做的就是将集合视图单元格中的文本发送到另一个带有segue的视图控制器。
答案 0 :(得分:5)
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.performSegue(withIdentifier: "contentVideoSegue", sender: indexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "contentVideoSegue"{
let selectedIndexPath = sender as? NSIndexPath
let videoContentVC = segue.destination as! VideoContentController
videoContentVC.text = items[selectedIndexPath.row] as String
}
}
希望能帮助:)
答案 1 :(得分:3)
从你的代码中你没有调用performSegue(withIdentifier:sender:)
所以你可能已经从CollectionViewCell创建了segue到DestinationViewController
。因此,在prepareForSegue
方法中使用此单元格获取indexPath。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let cell = sender as? UICollectionViewCell,
let indexPath = self.collectionView.indexPath(for: cell) {
let vc = segue.destination as! SecondViewController //Cast with your DestinationController
//Now simply set the title property of vc
vc.title = items[indexPath.row] as String
}
}
答案 2 :(得分:0)
因此您不需要在didSelect中设置单元格,因为您已经在cellForItemAtIndexPath中进行了此操作。
而是您想要在didSelectItemAtIndexPath中调用performSegue(withIdentifier: "SegueName", sender: indexPath)
。然后在你的prepareForSegue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let indexPath = sender as? IndexPath else { return }
let collectionCell = collectionView.cellForItem(at: indexPath)
let textToPass = collectionCell.textLabel.text
let detailVC = segue.destination as? DetailViewController
detailVC.passedInString = textToPass
}