Swift中UITableViewCell无法使用indexPath.row填充数据问题求助
解决UITableView Cell数据填充错误的问题
我一眼就看出问题出在哪啦——你现在用的是单个ChosenPlan对象,但UITableView要展示多行数据,肯定得用数组来存储多个计划条目呀!这就是为啥你用[indexPath.row]会报错,单个字符串的下标取到的是单个字符,而且单个对象也没法对应不同的cell。
下面是具体的修改步骤:
1. 把单个对象改成数组类型
首先把你的chosenPlanData变量从单个实例改成数组:
// 原来的写法:var chosenPlanData = ChosenPlan() // 修改成数组: var chosenPlanData: [ChosenPlan] = []
2. 调整回调里的赋值逻辑
你现在的回调是把单个result赋值给chosenPlanData,如果result是单个ChosenPlan,那应该把它添加到数组里;如果result本身就是数组,直接赋值就行。看你的代码逻辑,应该是每次选择一个计划就添加进去,所以修改回调:
let EventbriteTVC = segue.destination as! EventbriteTableView EventbriteTVC.callbackChosePlan = { result in DispatchQueue.main.async { // 把新选择的计划添加到数组里 self.chosenPlanData.append(result) self.individualPlanitsTableView.reloadData() } }
(注意:把reloadData放到异步闭包里面,确保在主线程更新UI,而且要在数据更新之后调用)
3. 修正cellForRowAt里的取值逻辑
现在数组里有多个ChosenPlan对象,就可以用indexPath.row来获取对应位置的条目了:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "individualPlansCell") as? PlanitsHomeViewCell else { return UITableViewCell() } // 获取当前行对应的ChosenPlan对象 let currentPlan = chosenPlanData[indexPath.row] cell.nameLbl.text = currentPlan.nameOfEvent cell.dateAndTimeLbl.text = currentPlan.eventStartsAt return cell }
这样每个cell就会展示数组里对应位置的计划数据啦,不会再所有cell都显示一样的内容。
额外提醒:别忘了实现numberOfRowsInSection方法
确保你实现了这个方法,返回数组的元素个数,这样tableView才知道要展示多少行:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return chosenPlanData.count }
这样修改之后,你的tableView就能正确展示每一行不同的计划数据了!
内容的提问来源于stack exchange,提问作者Coding while Loading
相关产品推荐
相关产品推荐

