Objective C UITableView - 更改单元格高度后表格单元格显示错误的内容

2024-03-17

我正在尝试在 xcode 中构建一个应用程序,它除了其他应用程序之外还读取 rss 提要并显示帖子。我是 Objective-C 的新手,有时发现它有点困难。

我使用 NSMutableArray 来获取检索到的故事(帖子)。每个故事都由一个 NSMutableDictionary 表示,其中包含帖子的标题、主题、日期和链接。所有这些都显示在 UIViewController 内的 UITableView 中。 我自定义了自己的单元格,因此我可以在其中显示多个标签。

我的问题是,如果我使用 tableView:heightForRowAtIndexPath:,前 5 个单元格(适合屏幕)显示正常,但如果向下滚动,下一个单元格似乎与前 5 个单元格具有相同的内容(即单元格 0-4 显示正常) ,单元格 5 包含单元格 0 的内容,单元格 6 包含单元格 1 的内容,等等)!如果我删除 tableView:heightForRowAtIndexPath: 一切都很好(除了没有我想要的单元格大小)

以下是代码的外观:

//  NavigationContentsViewController.h
@interface NavigationContentsViewController :
UIViewController <UITableViewDelegate, UITableViewDataSource> {

    UITableView *myTableView;
    IBOutlet UITableView * newsTable;
    UIActivityIndicatorView * activityIndicator;
    CGSize cellSize;
    NSXMLParser * rssParser;
    NSMutableArray * stories; 
    NSMutableDictionary * item; // it parses through the document, from top to bottom...

    NSString * currentElement;
    NSMutableString * currentTitle, * currentDate, * currentSummary, * currentLink;

}

@property(nonatomic,retain)NSMutableArray *itemsList;
@property(nonatomic,retain)UITableView *myTableView;
- (void)parseXMLFileAtURL: (NSString *)URL;

.

//NavigationContentsViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

// Configure the cell.
static NSString *MyIdentifier = @"MyIdentifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil){
    cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    // Set up the cell 
    int storyIndex = indexPath.row;
    //[cell setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];
    //Story title
    //cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
    //cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
    cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
    cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"];
    cell.lDate.text = [[stories objectAtIndex: storyIndex] objectForKey: @"date"];

    return cell;
}

return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *selectedCellItem = [NSString stringWithFormat:@"%d", indexPath.row];

    TableViewController *fvController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:[NSBundle mainBundle]];
    fvController.selectedCellItem = selectedCellItem;
    [self.navigationController pushViewController:fvController animated:YES];
    [fvController release];
    fvController = nil; 
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 80;
}

有什么线索吗? [编辑:更改 intstoryIndex = indexPath.row;]


这是人们在重复使用表格单元格时遇到的常见问题。

该行尝试重用单元格。这意味着如果单元格 0 移出屏幕,它将被重新用作单元格 5:

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

如果某个单元格无法重复使用,您将创建一个新单元格:

if (cell == nil){
    cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];

下一行是您的问题,仅当单元格无法重复使用时才设置单元格。发生 5 次(对于表格可见时可见的单元格)。

但是您的表格随后想要显示的所有单元格都将被重复使用已经包含内容的单元格。

    // Set up the cell 
    /*...*/

但别担心。这很容易解决。您必须将单元的创建与其配置分开。只需像这样移动一些代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"MyIdentifier";
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil){
        cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    }
    // whatever happened before. You have a valid cell at this point.

    // Set up the cell 
    int storyIndex = indexPath.row;
    //[cell setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];
    //Story title
    //cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
    //cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
    cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
    cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"];
    cell.lDate.text = [[stories objectAtIndex: storyIndex] objectForKey: @"date"];
    return cell;
}

编辑:也许我下次应该读一下这个问题。但我想我还是100%正确的。

如果我删除 tableView:heightForRowAtIndexPath: 一切都很好(除了没有我想要的单元格大小)

我认为这是巧合。你有多少细胞?我猜大概七八点吧?一切都很好,因为您的所有细胞同时可见。所以不需要重复使用一个cell,它们都有它们应该有的内容。

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

Objective C UITableView - 更改单元格高度后表格单元格显示错误的内容 的相关文章

随机推荐

  • @InjectMocks 之后为空

    在使用 JUnit 进行单元测试时 我在传递依赖项时遇到了一些麻烦 考虑这些代码 这是对我想要测试的类的依赖注入 我们称之为控制器 Inject private FastPowering fastPowering 这是单元测试 RunWit
  • 将gradle多项目转换为springboot fat jar应用

    我有一个 http servlet 应用程序多项目分级构建 我的项目是一个包含gradleHttpServlet 项目它依赖于其他两个 gradle java 项目 我将所有 3 个 jar 部署在tomcat webapps Web IN
  • toDataURL HTML5 获取画布数据的其他方式存在问题?

    我正在使用画布预先绘制图片 然后需要使用 Canvas toDataURL 将其保存到图像对象 但在 Chrome 上 我收到错误 未捕获的安全错误 无法在 HTMLCanvasElement 上执行 toDataURL 受污染的画布可能不
  • 我正在使用依赖注入:我应该将哪些类型绑定为单例?

    关于单例是否 不好 以及应该使用什么模式存在很多问题 他们通常关注单例设计模式 其中涉及从类的静态方法中检索单例实例 这不是这些问题之一 自从几个月前我真正 发现 依赖注入以来 我一直在推动它在我们团队中的采用 随着时间的推移从我们的代码中
  • read.csv() - 三列中的两列[重复]

    这个问题在这里已经有答案了 可能的重复 只读取 R 中有限数量的列 https stackoverflow com questions 5788117 only read limited number of columns in r 我有一
  • 使用 A* JPS 进行 3D 搜索

    我该如何概括跳转点搜索 http harablog wordpress com 2011 09 07 jump point search 3D 搜索量 到目前为止 我已经定义了涉及三个运动的 3D 立方体的修剪规则 直线 0 0 1 一阶对
  • 为什么在泛型类(Java)的构造函数中提供类型参数是错误的?

    我刚刚从一本教科书中学习 Java 中的泛型 其中讨论了一个类GenericStack
  • 如何使用 ICU4C 规范化字符串?

    我发现 ICU 文档有些挑战性 我的问题是 如何使用 ICU4C 规范化字符串 我正在查看 unorm2 normalize 但是如果缓冲区不够大怎么办 我以前怎么知道这一点 当然 我想标准化整个字符串 谢谢 gt 附 以下是该函数的 AP
  • 如何以编程方式更改 ActionBar 菜单项文本颜色?

    我有一个包含多个项目的操作栏 我想在单击该项目时更改文本的颜色 有没有办法以编程方式执行此操作 请提供示例或任何资源 Thanks public void catalogClick MenuItem item highlight menui
  • Scala 可变选项?

    我想要这样的东西 private val cachedResponse mutable Option empty A def get A cachedResponse getOrElseUpdate db findModel def upd
  • 基于非类型模板参数的重载

    我们熟悉基于函数参数的重载 但是为什么我们不能基于非类型模板参数进行重载呢 通过这种重载 您不必仅仅为了重载目的而添加额外的函数参数 这可能会对运行时性能产生负面影响 唉 下面的代码无法编译 template
  • jQuery 模拟点击选项卡并执行代码

    下面的代码 当我单击选项卡时 我会发布帖子并在选项卡中显示结果 在某些情况下 我想强制选择选项卡 但不仅选择该选项卡 而且选择该选项卡 执行单击它时执行的代码 在我的示例中 我喜欢选择第二个选项卡 jLikeToSet 1 并执行代码 po
  • 如何将一个android studio项目合并到另一个android studio项目中

    我有两个独立的 android 应用程序项目 它们是在 android studio 中制作的 我正在尝试将项目 1 合并到项目 2 中 使其成为一个应用程序 我将如何去做呢 我知道如何在 eclipse 中执行此操作 但不知道如何在 an
  • 使用 dart::ffi 从 Dart 包中调试 C++ 代码

    我正在用 C 开发一个包 用于 Flutter 应用程序 因此在 Dart 中 使用飞镖 菲菲 https dart dev guides libraries c interop我想知道除了记录消息之外 是否有更好的方法来调试 逐步 变量监
  • 从返回堆栈恢复片段时的savedInstanceState

    我可以用吗savedInstanceState 删除片段时保存状态 然后从返回堆栈弹出片段时恢复状态 当我从返回堆栈恢复片段时 savedInstanceState 包始终为空 现在 应用程序流程是 创建片段 gt 删除片段 添加到后台堆栈
  • MySQL 可以对单个查询使用多个索引吗?

    想象一个具有多列的表 例如 id a b c d e 我通常选择通过id但是 客户端应用程序中有多个查询对列的子集使用各种条件 当MySQL在多列上使用多个WHERE条件对单表执行查询时 它真的可以利用在不同列上创建的索引吗 或者使其快速的
  • 以编程方式构建 SQL 查询的可靠方法

    我必须求助于 ORM 不足的原始 SQL 使用 Django 1 7 问题是大多数查询最终有 80 90 相似 我无法找出一种稳健且安全的方法来构建查询而不违反可重用性 字符串连接是唯一的出路吗 即使用构建无参数查询字符串if else条件
  • Cloud Functions FCM 预期 OAuth 2 访问令牌

    因此 自 7 月 29 日以来 我注意到我的 Firebase Cloud Functions 在尝试发送 FCM 消息时抛出错误 错误 请求缺少所需的身份验证凭据 预期的 OAuth 2 访问令牌 登录 cookie 或其他有效身份验证
  • Json字符串化范围错误

    我从 API 得到的结果如下 id 1 area zone T aisle side E col 1 level 0 position 0 name T E 1 id 2 area zone T aisle side E col 60 le
  • Objective C UITableView - 更改单元格高度后表格单元格显示错误的内容

    我正在尝试在 xcode 中构建一个应用程序 它除了其他应用程序之外还读取 rss 提要并显示帖子 我是 Objective C 的新手 有时发现它有点困难 我使用 NSMutableArray 来获取检索到的故事 帖子 每个故事都由一个