我有一个 tableview,它具有喜欢和不喜欢特定帖子的功能。我的问题是,如果您喜欢某个帖子,它会正确显示,但如果您向下滚动然后向上滚动,它就会忘记。我该如何解决这个问题?
@IBAction func voteAction(_ sender: UIButton)
{
let stream_id = streamsModel.streamID[sender.tag]
let profile_id = streamsModel.Profile_ID[sender.tag]
streamsModel.voteStatusv = streamsModel.VoteStatus[sender.tag]
streamsModel.Likes = streamsModel.Votes[sender.tag]
streamsModel.streamIDv = streamsModel.streamID[sender.tag]
let cellT = getCellForView(view: sender)
let indexPath = TableSource.indexPath(for: cellT!)
if (indexPath != nil) {
let cell = TableSource.cellForRow(at: indexPath!) as! HomeTVC
if streamsModel.likeStatus == "0" {
// Liked
cell.votes.setTitle(String(streamsModel.Likes+1), for: UIControlState.normal)
cell.likeImage.setImage(UIImage(named: "like2"), for: .normal)
} else {
// Unliked
cell.votes.setTitle(String(streamsModel.Likes-1), for: UIControlState.normal)
cell.likeImage.setImage(UIImage(named: "like"), for: .normal)
}
// This snippet below causes an error
//TableSource.reloadRows(at: [indexPath!], with: .none)
}
}
上面的代码只是检查您是否喜欢某些东西 onClick 如果是,它会将计数加 +1 并将图像更改为喜欢。如果您不喜欢某些东西,那么它会在计数器上执行 -1 并将图像更改为默认值。再次一切正常。我唯一的问题是,如果我向下滚动然后返回,它会忘记我喜欢的东西。解决此问题的唯一方法是调用 tableView.reloadData()
。但是,这太多了,因为我只更新了 1 个单元格。有什么建议吗?
最佳答案
你还需要更改模型数组中的值,否则当你滚动 tableview 时你会得到旧值。试试这个代码
if (indexPath != nil) {
let cell = TableSource.cellForRow(at: indexPath!) as! HomeTVC
if streamsModel.likeStatus == "0" {
// Liked
streamsModel.Likes = streamsModel.Votes[sender.tag] + 1
cell.votes.setTitle(String(streamsModel.Likes+1), for: UIControlState.normal)
cell.likeImage.setImage(UIImage(named: "like2"), for: .normal)
} else {
// Unliked
streamsModel.Likes = streamsModel.Votes[sender.tag] - 1
cell.votes.setTitle(String(streamsModel.Likes-1), for: UIControlState.normal)
cell.likeImage.setImage(UIImage(named: "like"), for: .normal)
}
// This snippet below causes an error
//TableSource.reloadRows(at: [indexPath!], with: .none)
}
关于IOS Swift 如何更改 1 个表格 View 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51605390/