Swift开发:点击CollectionView跳转后如何将carModel绑定到TableViewCell标签
问题核心错误点
- TableViewCell的
configure方法逻辑错误:循环遍历车型数组赋值给同一个Label,最终只会显示数组最后一个元素,且循环范围语法错误,缺少.count - TableView行号写死为5,未和选中品牌对应的车型数组长度绑定,会导致数据越界或多余空行
- 数据传递逻辑不规范:使用全局变量传递选中索引,且跳转后才赋值索引顺序错误,容易产生数据混乱
- TableViewCell设计冗余:不需要传入完整的
Cars结构体,只需要传入当前行对应的车型字符串即可
修复方案
1. 给TableViewController添加接收数据的属性
在你的TableViewController类中添加以下属性,用来接收上一页传过来的车型数组:
var carModels: [String] = []
2. 修改CollectionView点击跳转逻辑
点击CollectionView单元格时,直接把选中品牌对应的车型数组传给下一页,不要用全局变量:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { guard let vc = storyboard?.instantiateViewController(identifier: "TableViewController") as? TableViewController else { return } // 先给下一页赋值数据再跳转 vc.carModels = cars[indexPath.row].carModel self.navigationController?.pushViewController(vc, animated: true) }
3. 修改TableView数据源方法
在TableViewController中实现数据源方法,绑定传入的车型数组:
extension TableViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // 返回传入的车型数组实际长度,不要写死固定值 return carModels.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell // 直接传当前行对应的单个车型字符串给Cell cell.configure(with: carModels[indexPath.row]) return cell } }
4. 简化TableViewCell的配置方法
@IBOutlet var lbl: UILabel! func configure(with modelName: String) { // 直接赋值即可,不需要循环遍历数组 lbl.text = modelName }
内容的提问来源于stack exchange,提问作者Nergezeev Alik
相关产品推荐
相关产品推荐

