iOS:UITableView 滚动太快时会混合数据

2023-12-11

我已经对 UITableViewCell 进行了子类化以向其添加自定义外观。在 MYTableViewCell 的初始化级别,我添加了 4 个子视图:UIImageView 和三个 UILabel。所有 4 个子视图都分配有不同的标签。

在 cellForRowAtIndexPath 方法中,我要么创建一个新单元格(如果一开始不可用),要么重用可用单元格并将正确的文本分配给 ui 标签。

我遇到的问题是,如果我尝试超快滚动,那么数据会变得混乱,但是如果我更慢地上下滚动,那么一切都会正常。

有什么想法吗??

下面是代码:

- (MyTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"itemListTableViewCell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

DisplayableEntity *displayableEntity = [self.fetchedResultsController objectAtIndexPath:indexPath];

if( ! cell ) {
    cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    [self tableView:tableView appearanceForCell:cell withEntity:displayableEntity];
} else {

    UIImageView *imageView = (UIImageView *) [cell viewWithTag:IMAGEVIEW_TAG];
    imageView.image = [UIImage imageNamed:displayableEntity.displayImageName];

    UILabel *titleLabel = (UILabel *) [cell viewWithTag:TITLEVIEW_TAG];
    titleLabel.text = displayableEntity.entityName;

    UILabel *itemDescription = (UILabel *) [cell viewWithTag:DESCRIPTION_TAG];
    itemDescription.text = displayableEntity.entityDesctiption;
  }
}

// some code removed to make it brief
- (void)tableView:(UITableView *)tableView appearanceForCell:(MyTableViewCell *)cell withEntity:(DisplayableEntity *)entity {

    // cell image view
    UIImageView *cellImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[entity displayImageName]]];
    [cellImageView setTag:IMAGEVIEW_TAG];
    [cell addSubview:cellImageView];

    // adding entity name label    
    UILabel *itemTitleName = [self itemTitleNameLabelWithFrame:itemNameLabelRect itemName:[entity entityName]];
    [itemTitleName setTag:TITLEVIEW_TAG];
    [cell addSubview:itemTitleName];

    // adding 'assigned to' label right under the item name label
    UILabel *itemDescriptionLabel = [self itemDescriptionLabelWithFrame:descriptionLabelFrame itemDescription:[entity entityDesctiption]];
    [itemDescriptionLabel setTag:DESCRIPTION_TAG];
    [cell addSubview:itemDescriptionLabel];
}

我看到一些麻烦tableView:cellForRowAtIndexPath:逻辑 它应该是:

  1. 使单元出队
  2. 如果单元格无法出列 - 创建新单元格
  3. 设置所有单元格属性

我的意思是这样的:

- (MyTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"itemListTableViewCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    } // <-- Note there is no else, we should reset properties in both cases

    NSManagedObject *managedObject = [_fetchedResultsController objectAtIndexPath:indexPath];

    cell.textLabel.text = [managedObject valueForKey:@"text"];
    cell.imageView.image = [managedObject valueForKey:@"image"];

    return cell;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS:UITableView 滚动太快时会混合数据 的相关文章

随机推荐

  • 如何让 Homebrew 恢复到之前的状态?

    我删除了一些 rb 文件 cassandra rb 电子邮件受保护 and 电子邮件受保护 从文件夹 usr local Homebrew Library Taps homebrew homebrew core Formula 来自 mac
  • Win32 中的 Sleep() 使程序无响应

    基本上就是标题所说的 我想当用户按下特定按钮时每 1 秒更新一次按钮包含的文本 我注意到 当程序没有焦点时 它可以正常工作并且文本刷新正确 但是当我将鼠标悬停在程序上或尝试单击它的菜单时 Windows 通知我该程序没有响应 并询问我是否我
  • 关于传统解释器、编译器和 JIT 编译器/解释器的澄清

    我正在学习 Java 以下事情对我来说有点困惑 我的理解是 Java编译器 Java 编译器只是转换 java程序进入 class文件 这意味着将我们的源代码转换为字节码 它是虚拟机 JVM 的操作码列表 这使得 Java 平台无关 Jav
  • 这是一个错误的 REST URL 吗?

    我刚刚阅读了有关 REST URL 的内容并看到了以下示例 API 用户 获取用户 现在 如果使用动词 GET 通过 HTTP 进行访问 这不是一个错误的 URL 因为它描述了 URL 中的操作 GET 这更像是一个惯例 而不是硬性规则 但
  • 现在有人可以下载 Eclipse 吗?

    我无法下载 Eclipse 这是Eclipse的问题吗 这是链接https www eclipse org downloads packages 是的 在计划内的维护中断之后 eclipse org 网站是很遗憾无法到达的到目前为止 202
  • 调用未定义的方法 Illuminate\Pagination\Paginator::make()?

    这是我的代码 use Illuminate Support Collection use Illuminate Support Facades Input use Illuminate Pagination Paginator collec
  • CakePHP - 分页和排序二级关联

    我知道这个问题已经被问了 100 000 次 但我几乎阅读了所有 100 000 条回复 但似乎没有一个符合我的要求 我已经尝试了所有可能的组合 显然没有 但我担心我会在如此相对简单的事情上失败 这是我的第二个蛋糕项目 所以我绝不是专家 简
  • 如何绘制混合箱线图:一半箱线图,另一半有抖动点?

    我正在尝试制作与图 2d f 类似的图文章发表在 自然 杂志上今年 它基本上是一半箱线图 另一半是点 有人能给我一些提示吗 非常感谢 这些是我的数据和代码 它们生成了带有点的完整框 require magrittr require tidy
  • android 媒体播放器显示音频但不显示视频

    我正在使用媒体播放器来播放视频 它只播放音频而不播放视频 有人可以帮忙吗 我的代码如下 public class VideoViewApplication extends Application Override public void o
  • WHERE-CASE 子句子查询性能

    该问题可能特定于 SQL Server 当我编写如下查询时 SELECT FROM IndustryData WHERE Date 20131231 AND ReportTypeID CASE WHEN fnQuarterDate 2013
  • XSLT :将命名空间声明添加到根元素

    我有这个 XML 文档
  • 更新 SQL Server 2012 中的 varbinary(MAX) 字段丢失最后 4 位

    最近想做一些数据修补 尝试更新一列 typevarbinary 最大 更新值是这样的 0xFFD8F 6DC0676 但是 更新查询成功运行后 该值变为 0x0FFD8 6DC067 看起来最后 4 位丢失了 或者整个值右移了一个字节 我尝
  • 如何通过脚本设置Azure DevOps版本的描述?

    在 Azure DevOps 中 我尝试通过 PowerShell CMD 设置版本描述 以便根据构建步骤中工件的输入获得版本的动态描述 我尝试通过 powershell 设置发布变量 例如 Write Host vso task setv
  • 如何让循环中的多个ajax请求按顺序返回值?

    我必须循环发出一系列 Ajax 请求 大约有100个 每个请求都会返回一个 JSONP 变量 我从 JSON 中提取数据并将值附加到 div 中 问题是我希望 div 按函数调用的顺序附加数据 即依次 现在 每次刷新页面时 我都会根据请求完
  • Dask Dataframe 将列表的列拆分为多列

    在 Pandas 中可以轻松完成相同的任务 import pandas as pd df pd DataFrame lists i i 1 for i in range 10 df left right pd DataFrame x for
  • 这个“标签”在 C++ 中意味着什么?

    我正在阅读一些 C 代码 我看到了一些有趣的东西 代码是这样的 repeat code here fallback code here start another code 这是我第一次在 C 代码中看到这种 标签 我称之为标签是因为我在汇
  • 没有显式锁定的 postgres 死锁

    我使用 PostgreSQL 9 2 并且我没有在任何地方使用显式锁定 也没有LOCK声明也不SELECT FOR UPDATE 然而 最近我得到了ERROR 40P01 deadlock detected 不过 检测到死锁的查询被包装在事
  • 如何通过ajax将表单数据发送到python脚本?

    我正在努力处理 python 程序和 ajax 请求 我正在尝试将一些数据从 Javascript 获取到 python 程序中 我一直在使用 getfirst field name 的正常方法不起作用 我认为这是因为请求是通过 ajax
  • 在离开未保存更改的网页之前警告用户

    我的申请中有一些带有表格的页面 如何保护表单 以便在有人离开或关闭浏览器选项卡时 系统应提示他们确认是否确实要保留未保存数据的表单 简短 错误的答案 你可以通过以下方式做到这一点处理beforeunload事件并返回一个非空字符串 wind
  • iOS:UITableView 滚动太快时会混合数据

    我已经对 UITableViewCell 进行了子类化以向其添加自定义外观 在 MYTableViewCell 的初始化级别 我添加了 4 个子视图 UIImageView 和三个 UILabel 所有 4 个子视图都分配有不同的标签 在