You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:13:43