gpt4 book ai didi

objective-c - 过多的 UITableView 单元格

转载 作者:行者123 更新时间:2023-11-29 04:35:55 25 4
gpt4 key购买 nike

我有一个自定义的 UITableViewCell,在我开始滚动之前,它似乎在我的 table 上出现了多次。 dequeueReusableCellWithIdentifier 似乎无法正常工作。这是我的手机:

MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
... setup ...
}

当我在 tableView 上调用 reloadRowsAtIndexPaths: 时,由于某种原因,它不会使该单元格出队,而是重新创建新的单元格。然后,当我向上滚动然后再次向下滚动时,有时我的第一个单元出队,有时第二个单元出队。 MyCustomCell 基本上是一个文本字段,因此根据出列的文本字段,文本每次都有不同的数据。

我还应该在自定义单元中做更多事情吗?提前致谢。

最佳答案

您在问题中提到了reloadRowsAtIndexPaths:,但该方法实际上是reloadRowsAtIndexPaths:withRowAnimation:。重新加载可以动画这一事实很重要。例如,要对 UITableViewRowAnimationLeft 进行动画处理,表格 View 需要滑出旧单元格,同时滑入新单元格。新旧单元格同时显示在屏幕上,因此表格 View 不能仅对两者使用相同的 UITableViewCell 对象。这就是为什么“它不会使该单元出列并重新创建新单元”。它需要一个新的,因为旧的仍然可见。

您需要确保在收到 tableView:cellForRowAtIndexPath: 消息时,完全初始化单元格(无论是出列的还是新创建的)以显示请求行的数据,并且请求行的数据。

此外,您无法保留自己的从行的 indexPath 到单元格的映射,因为(在动画期间)同一行可能有两个单元格。相反,如果您在任何时候需要获取当前显示行数据的单元格,则需要通过向 TableView 发送 cellForRowAtIndexPath: 消息来向 TableView 询问该单元格。

关于objective-c - 过多的 UITableView 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com