2014-09-30 46 views
0

我有一个自定义的UITableViewCell,它具有从服务器获得的数据。当数据进来时,我设置了单元格的重用标识符。一切工作正常,直到我执行下拉刷新并获取新的/更新的数据。来自服务器的标识符是相同的,但是数据可能不同(这是在这种情况下的预期结果)。发生这种情况时,我需要重新创建单元格,并保持相同的重用标识符。我知道不设置reuseIdentifier是解决这个问题的方法之一,但这是一个非常糟糕的主意,会伤害到性能。Objective-c从UITableViewCell中删除reuseIdentifier

我已经看过很多关于reuseIdentifier的问题,但是他们没有一个能够解答我的问题。

谢谢你的任何洞察力!

+0

我不认为你明白它应该如何工作。 reuseIdentifier标识一个初始化单元格的特定方法(例如,设置背景颜色,添加标签等),这样,如果您使用该标识符将其出队,则不需要重新初始化。 – 2014-09-30 22:08:42

+1

对于一个简单的表格,所有行的格式都是相同的,所有内容都使用一个reuseIdentifier值。 – 2014-09-30 22:15:32

+0

我知道reuseIdentifier标识了一种识别单元的特定方式。就我而言,每个单元格都是根据我从服务器获得的信息唯一创建的。所以当我滚动到底部,并且备份时,我确实得到了正确的单元格,因为设置了reuseIdentifier,并且我不需要重新初始化它。当我下拉刷新时,单元格“x”的数据可能会改变,并且我的单元格的设置方式,我需要重新创建单元格。 – 2014-09-30 22:40:59

回答

2

没有必要清除reuseIdentifier。只需在设置新数据后重新加载表格视图。所有可见的单元格将被重新加载。使用相同的reuseIdentifier是好的。只要您的cellForRowAtIndexPath方法正在使用新数据来填充每个单元格,就会得到期望的结果。

更新 - mkral的评论是一个很好的说明。 reuseIdentifier表示单元格的类型,而不是数据。因此,除非服务器的标识符影响所显示的单元格类型,否则重用标识符应该与服务器的标识符完全无关。

+0

为了补充说明,'reuseIdentifier'意在识别不同类型的单元。因此,如果只有一种类型的单元格,它将检查是否可以重复使用具有相同标识符且不再使用的另一个单元格(屏幕外),因此它不会为1000条记录创建1000个UITableViewCell实例。它只会创建+/-可用于tableview的单元格的数量,并在滚动时重用不可见的单元格。 – mkral 2014-09-30 22:07:17

+0

我拥有的每个单元格都是基于服务器信息创建的,当我初始化单元格时,I使用来自服务器的数据初始化它。重新加载数据被调用时,表视图使单元出队,并且更改不显示,因为init不会被调用。 – 2014-09-30 22:45:28

+1

你需要用你的'cellForRowAtIndexPath'方法更新你的问题。顺便说一句 - 数据不应该传递给单元格的'init ...'方法。细胞得到重用。您需要能够在调用init之后更新单元的数据。 – rmaddy 2014-09-30 22:53:38