我有一个带有单元格的tableview,当选中时会在所选单元格中显示图像,此图像会在再次选择单元格时消失,依此类推。当我按下提交按钮时,将记住所选单元格,并使用新数据重新加载tableview。但是在执行此操作时,所有新数据都会加载,但选定的单元格图像仍然存在。我试过在主队列上调用tableView.reloadData()但它仍然存在。当我多次按下提交按钮时,图像也会持续存在。
继承我的代码:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return currentQuestion.answers.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return tableView.frame.height/CGFloat(currentQuestion.answers.count)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
setSelectedArray()
let cell: AnswersTableViewCell = tableView.dequeueReusableCell(withIdentifier: "answersTableViewCell") as! AnswersTableViewCell
let text = currentQuestion.answers[indexPath.row]
let isAnAnswer = currentQuestion.answerKeys[indexPath.row]
cell.answerTextLabel.text = text
cell.answerView.backgroundColor = UIColor.white.withAlphaComponent(0.5)
cell.contentView.sendSubview(toBack: cell.answerView)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell: AnswersTableViewCell = tableView.cellForRow(at: indexPath) as? AnswersTableViewCell {
if cell.answerImageView.image == nil {
cell.answerImageView.image = UIImage(named: "paw.png")
selected[indexPath.row] = true
} else {
cell.answerImageView.image = nil
selected[indexPath.row] = false
}
}
}
@IBAction func submitButtonWasPressed() {
if questionNumber < questions.count - 1 {
questionNumber += 1
setCurrentQuestion()
self.answersTableView.reloadData()
self.view.setNeedsDisplay()
}
}
任何帮助都会很棒。感谢
答案 0 :(得分:2)
您需要在cellForRow
中将图像设置回正确的值。表格中的单元格在调用reloadData
之间重复使用,因为您没有触及imageView,所以它保留了之前的值。看起来像你想要的那样:
cell.answerImageView.image = selected[indexPath.row] ? UIImage(named: "paw.png") : nil
在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
内。