IOS Swift如何更改1个表格视图单元格
我有一个tableview,它有自己喜欢的功能,也有自己不喜欢的功能。我的问题是,如果你喜欢一篇文章,它会正确显示,但如果你向下滚动,然后向上滚动,它就会忘记。我怎样才能解决这个问题IOS Swift如何更改1个表格视图单元格,ios,swift,uitableview,Ios,Swift,Uitableview,我有一个tableview,它有自己喜欢的功能,也有自己不喜欢的功能。我的问题是,如果你喜欢一篇文章,它会正确显示,但如果你向下滚动,然后向上滚动,它就会忘记。我怎样才能解决这个问题 @IBAction func voteAction(_ sender: UIButton) { let stream_id = streamsModel.streamID[sender.tag] let profile_id = streamsModel.Profile_ID[sender.tag]
@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)
}
您还需要更改模型数组中的值,否则在滚动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)
}
将此代码置于voteButton操作中,然后重新加载特定单元格
let indexPath = IndexPath(item: sender.tag, section: 0)
tableView.reloadRows(at: [indexPath], with: .none)
将此代码置于voteButton操作中,然后重新加载特定单元格
let indexPath = IndexPath(item: sender.tag, section: 0)
tableView.reloadRows(at: [indexPath], with: .none)
您可以使用reloadRows(at:with:)方法
注意:这个方法接受一个IndexPath数组,如果只需要重新加载一个单元格,那么需要在数组中传递该IndexPath
此外,间歇性的相似/不相似问题在可重用单元中非常常见。您需要单独维护该选择,以便仅在所选单元格上适当地显示like。如果我能更深入地了解您到底在做什么,我可能会给您一个确切的解决方案。您可以使用重载行(at:with:)方法
注意:这个方法接受一个IndexPath数组,如果只需要重新加载一个单元格,那么需要在数组中传递该IndexPath
此外,间歇性的相似/不相似问题在可重用单元中非常常见。您需要单独维护该选择,以便仅在所选单元格上适当地显示like。如果我对您的具体操作有更深入的了解,我可能会给您一个确切的解决方案。您应该在
cellForRowAt
方法中维护liked标志作为索引并对其进行配置?它是在视图控制器中还是在自定义单元格类中?正确的解决方案是更新数据模型,而不是单元。然后告诉表视图重新加载这一行。它位于视图控制器中。是的,我计划更新数据模型,只是想看看是否有可能在action方法中进行更新。我将尝试在cellForRowAt中对其进行配置。您应该将liked标志维护为索引,并在cellForRowAt
期间对其进行配置,该voteAction
方法在哪里?它是在视图控制器中还是在自定义单元格类中?正确的解决方案是更新数据模型,而不是单元。然后告诉表视图重新加载这一行。它位于视图控制器中。是的,我计划更新数据模型,只是想看看是否有可能在action方法中进行更新。我将尝试在cellForRowAt中配置它。不要在此处获取单元格。只需更新模型,然后为一个索引路径调用reloadRows(at
。cellForRow
将根据需要更新单元格。不要在此处获取单元格。只需更新模型,然后为一个索引路径调用reloadRows(at
。cellForRow
将根据需要更新单元格。