为什么手动重用UITableViewCell会在行重新加载时消失?

时间:2012-11-26 22:34:31

标签: uitableview reuseidentifier

如果我将一个带有reuseidentifier = UITableViewCell的固定nil作为ivar并为特定行返回此实例,然后使用[tableView reloadRowsAtIndexPaths:withRowAnimation:]专门重新加载此行,则行内容将消失(或有时闪烁)。当我向外滚动并返回时,它再次变得可见。另一方面,如果我[tableView reloadData],它就不会消失。

  • 当我重新加载行时,它为什么会消失?
  • 为什么不重新加载整张桌子?

以下是一个示例项目:https://github.com/hannesoid/HOTableViewTests

我在iOS 6上测试了这个。 我知道通常不推荐以这种方式手动重用UITableViewCell(没有使用useidentifier& dequeueing),但在一些非常静态的情况下,它会简化事情。

2 个答案:

答案 0 :(得分:1)

UITableView由Apple优化,因此它使用相当少的内存,但在屏幕上出现单元格时仍然具有良好的性能。当你做这样的非标准事件并绕过优化时,你就会把整个机器搞得一团糟。这是我的建议。如果您现在拥有一个特定的行作为实例变量,为什么不尝试为其reuseIdentifier赋予它唯一的名称?让套件解决。

答案 1 :(得分:0)

reuseIdentifier等于nil不是一个好习惯。始终使用字符串/名称初始化reuseIdentifiercellForRowAtIndexPath通过查看reuseIdentifiers来重新加载行。如果找到具有现有reuseIdentifier的缓存单元格,则会直接显示这些单元格而不分配和初始化新单元格。使nil导致问题。所以,制作reuseidentifier=@"cell"或你喜欢的东西。这将解决您的问题。