每次视图出现时 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()的主要内容,如果未能解决你的问题,请参考以下文章

每次视图出现时,UIView 层的子层显示不同/随机

自定义单元格的刷新控制问题 - Swift 4 IOS 11

如何让我的倒数计时器重置为每次视图加载时?

Laravel 在 MAMP 上每次创建新视图时,我都必须将存储/视图 CHMOD 到 777,然后是 775

如何在uitableview中加载数据而不每次都重新加载

IOS子视图并不总是出现