在UITableViewCell中访问struct massive



我已经创建了一个与carName的集合视图,其中有5个,点击后,例如Mercedes(集合视图的单元格之一)我想设置标签文本自己的值:carModel(carName和carModel都是相同的结构属性)在表视图已经由我创建,但我不能访问carModel数组

我尝试for循环,但它返回一个错误

for i in cars.carModel {
lbl.text = cars.carModel[i]
}

任何解决方案都将受到欢迎

//数据源文件

struct Cars {
let carName:String
let carModel:[String]
}
let cars:[Cars] = [
Cars(carName: "Mercedes", carModel: ["S Class","A Class", "B Class"]),
Cars(carName: "BMW", carModel: ["X5","X6","X7"]),
Cars(carName: "Ford", carModel: ["Fuison","Focus","Mustang"]),
Cars(carName: "Toyota", carModel: ["Camry", "Corolla"]),
Cars(carName: "Hyundai", carModel: ["Elantra"])
]

//表视图单元格文件

class TableViewCell: UITableViewCell {
@IBOutlet var lbl: UILabel!
func configure(with cars:Cars){
lbl.text = cars.carName
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}

//mainviewcontroller

class ViewController: UIViewController {

@IBOutlet weak var collectionView: UICollectionView!

//@IBOutlet weak var tableView
override func viewDidLoad() {
super.viewDidLoad()
collectionView.dataSource = self
collectionView.delegate = self
}
}
extension ViewController: UICollectionViewDataSource{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return cars.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as? CollectionViewCell
cell?.setup(with: cars[indexPath.row])
return cell!
}
}
extension ViewController:UICollectionViewDelegate,UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = storyboard?.instantiateViewController(identifier: "TableViewController") as? TableViewController
self.navigationController?.pushViewController(vc!, animated: true)

}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.configure(with: cars[indexPath.row])
return cell
}
}

这是我的模拟器:img1img2

我想要的:预期结果img

当你定义UITableViewDataSource时,你在函数方法中设置行数以返回常量(5)。在cellForRowAt函数中,你用Cars对象设置单元格。

我认为你混淆了什么数据应该用于表视图的数据源。

对于集合视图数据源,您必须:

  • section函数应该返回的行数:cars.count
  • 函数项的单元格必须用Cars实例配置CollectionViewCell

我认为你所缺少的是保存在集合视图中选择的单元格,以使用它向表视图提供正确的数据。

在集合视图委托中,当用户点击一个单元格时,你可以保存选定的indexPath或Cars实例,这将被表视图委托使用。我们叫它selectedCar

对于表视图数据源你必须:

  • section函数应该返回的行数:selectedCar.carModel.count
  • Cell for item atfunction必须配置TableViewCell与CarModel实例(这是一个String)

我在Github中创建了一个小项目作为示例,正在按预期工作。看看吧。希望这对你有所帮助。示例视频在Youtube.

注意:在ViewController中为tableView或collectionView设置数据源和委托并不是组织代码的最佳方式,但对于示例代码是可以的。

相关内容

  • 没有找到相关文章