如何在集合视图之间传递数据 Swift
How to pass data between collection views Swift
我想将一些数据从一个集合视图传递到另一个集合视图,但出现以下错误:
Cannot convert value of type '[IndexPath]?' to expected argument type 'Int'
当我按下一个单元格时,我想向另一个集合视图显示一些数据。
这是代码。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
performSegue(withIdentifier: "showItems", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? ItemsViewController
{
///Below is the error
destination.items = guys[collectionView.indexPathsForSelectedItems]
}
}
错误发生是因为 guys
数组需要一个 Int
索引而不是可选的索引路径数组。
一种解决方案是在 sender
参数中发送 indexPath
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
performSegue(withIdentifier: "showItems", sender: indexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? ItemsViewController
{
let indexPath = sender as! IndexPath
destination.items = guys[indexPath.row]
}
}
items
好像是一个数组,但是didSelectItemAt
只考虑了当前的索引路径。所以要么声明一个 item
要么创建一个数组
destination.items = [guys[indexPath.row]]
另一种解决方案是确实使用 indexPathsForSelectedItems
,但您必须以某种方式解包可选并将索引路径映射到行并获取给定索引处的项目。
你能试试下面的代码吗?
if let index = collectionView.indexPathsForSelectedItems?.first?.row {
destination.items = guys[index]
}
我想将一些数据从一个集合视图传递到另一个集合视图,但出现以下错误:
Cannot convert value of type '[IndexPath]?' to expected argument type 'Int'
当我按下一个单元格时,我想向另一个集合视图显示一些数据。
这是代码。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
performSegue(withIdentifier: "showItems", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? ItemsViewController
{
///Below is the error
destination.items = guys[collectionView.indexPathsForSelectedItems]
}
}
错误发生是因为 guys
数组需要一个 Int
索引而不是可选的索引路径数组。
一种解决方案是在 sender
参数中发送 indexPath
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
performSegue(withIdentifier: "showItems", sender: indexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? ItemsViewController
{
let indexPath = sender as! IndexPath
destination.items = guys[indexPath.row]
}
}
items
好像是一个数组,但是didSelectItemAt
只考虑了当前的索引路径。所以要么声明一个 item
要么创建一个数组
destination.items = [guys[indexPath.row]]
另一种解决方案是确实使用 indexPathsForSelectedItems
,但您必须以某种方式解包可选并将索引路径映射到行并获取给定索引处的项目。
你能试试下面的代码吗?
if let index = collectionView.indexPathsForSelectedItems?.first?.row {
destination.items = guys[index]
}