我有一个基于时间戳锁定/解锁的信息的表格视图。
如果我有单元格AB和C并且根据从Firebase中提取的时间戳分别在30秒,1分钟和1分钟30分钟内解锁,我需要一种方法来检查这些时间戳来解锁它们,也就是说让它们能够选择单元格。
我能想到这样做的唯一方法是设置一个每秒运行一次的NSTimer,以检查具有时间戳属性和锁定属性的Post类数组。当视图加载时,我会检查时间戳,并根据时间戳初始设置锁定属性,然后NSTimer将每秒运行一次,并将帖子时间戳与其“解锁”日期进行比较。如果帖子准备解锁,其“锁定”变量将关闭为“false”,用户将能够点击它。
因为我正在显示单元格上的图像锁定/解锁的内容,所以这需要每秒在tableview上重新加载以使锁定的图像保持最新。这听起来很糟糕。
有没有一种好方法可以做到这一点,或者这样做会好吗?
答案 0 :(得分:3)
几点想法:
根据您描述的方案,tableview不需要每秒重新加载一次。您将每隔一秒钟检查计时器触发,但只有在有问题的帖子实际需要解锁时才需要重新加载(看起来大约间隔30秒,而不是那么糟糕) )。
如果您可以找出需要重新加载的单元格的索引,则可以直接调用reloadRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation)
UITableView
方法。这将避免更新整个tableview以重新加载单行,并且如果由于行重新加载太多而遇到跳跃,可以稍微改善UX。 Documentation here
如果您担心实际的定时器每秒触发,但知道您的行数有限(特别是如果它只是您列出的3行),那么您可以为每行创建一个单独的计时器在适当的时间(30秒,1分钟等)发射。但是,每秒发射一次计时器并不是一件大事,也不会引起任何明显的性能问题。