每次视图出现时 tableView.reloadData()
Posted
技术标签:
【中文标题】每次视图出现时 tableView.reloadData()【英文标题】:tableView.reloadData() every time view appears 【发布时间】:2017-02-10 11:10:20 【问题描述】:我正在使用 Firebase 开发 Instagram 等社交应用。用户在主屏幕和个人资料中分享照片的地方。我的问题是当 user1 在 主屏幕 中喜欢 user2's picture2 并访问 user2's 个人资料时在重新加载单元格之前,该 picture2 的 like 值仍然相同。
如果我向下滚动并返回到 picture2 单元格正在重新加载,它将具有正确的类似值。因为我在我的单元格中使用了 didSet ,在那里完成了获取类似值的操作。但这是一个糟糕的用户体验。所以我的解决方案是每次都重新加载 collectionViews。
这对性能来说是一件坏事还是有任何其他问题?
【问题讨论】:
这对性能有点不利,您可能只想重新加载最后一行...检查一下:Refresh Certain Row of UITableView based on int in Swift 请分享一些代码,如果可能的话,不要分享问题图片 @Xcoder123 实际上不是最后一行。它们是长期排序的,不能说它在个人资料页面中对应的位置,所以 reloadRowsAtIndexPaths() 在我重新安排我认为的方法之前对我不起作用。 @UnalCelik 我的回答对你有用吗? 【参考方案1】:你可以这样做:
目标 C
NSArray *visibleCells = [_tblWhoAreYou visibleCells];
for (WhoRUSWCell *cell in visibleCells)
NSIndexPath *indexPath = [_tblWhoAreYou indexPathForCell:cell];
cell.imageStatus.image=[UIImage imageNamed:@"greenCircle.png"];
[cell setNeedsLayout]; // OR you can reload particular cell
Swift 3.0
var visibleCells: [Any] = self.tblWhoAreYou.visibleCells
for cell: WhoRUSWCell in visibleCells
var indexPath: IndexPath? = self.tblWhoAreYou.indexPath(for: cell)
cell.imageStatus.image = UIImage(named: "greenCircle.png")
cell.setNeedsLayout() // OR you can reload particular cell
使用它可以直接更新图像而无需重新加载。您只需检查您的标签或其他任何内容即可找到您要更新的选定对象。
【讨论】:
你能给我更多的信息吗?我是开发的初学者,我正在使用 Swift。实际的问题是,每次视图出现时重新加载 collectionView 是不是一件坏事。谢谢。 @UnalCelik 如果您喜欢我的回答,那么您不想每次都重新加载 collectionView。无需重新加载,您就可以更新单元格中的任何内容。 它像魅力一样工作......唯一对我不起作用的是setNeedsLayout()。我使用了 collectionView.reloadItems(at: [indexPath]) 而不是那个。您可能想为其他新手编辑它:) 谢谢!以上是关于每次视图出现时 tableView.reloadData()的主要内容,如果未能解决你的问题,请参考以下文章
自定义单元格的刷新控制问题 - Swift 4 IOS 11