gpt4 book ai didi

ios - 重用系统和以编程方式设计的 TableView 问题

转载 作者:行者123 更新时间:2023-11-28 05:50:41 25 4
gpt4 key购买 nike

我的单元格有问题,我删除/插入到我的 tableView,我删除和插入我的单元格是这样的:

self.tableView.beginUpdates()
user.lobbySurvey.remove(at: 0)
self.tableView.deleteRows(at: [IndexPath(row: 0, section: 0)], with: .fade)
self.tableView.endUpdates()

插入:

self.tableView.beginUpdates()
user.lobbySurvey.insert(surveyEnded, at: rowToInsert)
self.tableView.insertRows(at: [IndexPath(row: rowToInsert, section: 0)], with: .fade)
self.tableView.endUpdates()

lobbySurvey 是 TableView 的数据数组。问题是我添加的单元格保留了我之前删除的第一个单元格的设计。

我认为这个问题是因为我检查了卡片是否抽出。如果未选中:每次重新使用单元格时都会添加卡片 View 。这就是我检查单元格是否绘制的方式:

func drawSurveyEnded(){
if(cardIsDraw == false){
surveyEnded.draw(cardView: self.cardView)
surveyEnded.delegate = self
self.addCardShadow()
cardIsDraw = true
}
}

该函数被多次调用导致iOS的重用系统。所以我认为我的问题来自这里。

为什么我的 tableView 中的单元格保留了我删除的前一个单元格的设计?

其他代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:"Celll") as! CardCell
for survey in user.lobbySurvey{
let index = user.lobbySurvey.index(where: {
//get the current index is nedeed else the cells reuse lazy
$0 === survey
})
if indexPath.row == index{
var surveyState : UserSurvey.state
surveyState = survey.state
switch surveyState{
case .selectSurvey:
cell.drawCard(statutOfCard: .selectSurvey)
case .goSurvey:
cell.drawCard(statutOfCard: .goSurvey(picture: survey.picture))
case .surveyEnded:
cell.drawCard(statutOfCard: .surveyEnded(picture: survey.picture))
case .surveyWork:
print("survey in progress to vote")
case .surveyWaiting:
cell.drawCard(statutOfCard: .surveyWaiting(selfSurveyId: survey.id, timeLeft: survey.timeLeft, picture: survey.picture))
case .buyStack:
cell.drawCard(statutOfCard: .buyStack(supView : self.view))
}
}
}

cell.delegate = self
cell.delegateCard = self
cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
tableView.backgroundColor = .clear
tableView.layer.backgroundColor = UIColor.clear.cgColor
return cell
}

抽卡是调查状态的简单切换,调用了创建卡片的好函数,就像我之前发布的这个:drawSurveyEnded

最佳答案

在您的 CardCell 中,您必须实现 prepareForReuse 并从那里清除单元格的 View 。因此,当细胞被回收时,它们会从之前绘制的 View 中清除。

关于ios - 重用系统和以编程方式设计的 TableView 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53063367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com