【问题标题】:UITableView placeholder for dequeued cells出队单元格的 UITableView 占位符
【发布时间】:2011-11-20 01:34:51
【问题描述】:


这个愚蠢的小东西让我很恼火,我很想听听你对此的看法。

我正在使用带有自定义 UITableViewCell 的 UITableView 来显示来自 RSS 提要的一些新闻项目。这很好用,

唯一的问题是 - 向下滚动时,我看到“旧”单元格,只有当我的滚动停止时,它才会加载新内容。

所以我的问题是 - 我可以以某种方式放置一个占位符,以便在滚动或其他某种指示时至少显示“正在加载”吗?

提前致谢:)

【问题讨论】:

  • 您能否向我们展示您的代码,尤其是 cellForRowAtIndexPath 以及您为更新自定义单元格而调用的方法?谢谢
  • 嗨,马丁,在这里 :) 谢谢pastebin.com/2acWU42Y

标签: iphone ios uitableview placeholder


【解决方案1】:

你什么时候用内容填充你的单元格,通常你在UITableViewDataSource这样做

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

每次在显示之前需要一个单元格时都会调用它。如果你设置数据表格,这里的单元格将在显示之前更新。

如果您从网络上抓取某些内容,这可能需要一些时间,您可以在这里设置您从网络上抓取的任何内容以加载或占位图像。

然后在UITableViewDelegate

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath; 

开始异步获取数据并在收到数据时更新单元格。

【讨论】:

  • willDisplayCell 解决方案听起来正是我所需要的!生病试试,谢谢! :)
  • 嘿,我尝试了以下操作但没有成功,知道我做错了什么吗? pastebin.com/hUGvGt5x
  • 您在 tableview 中使用 webview?问题是您对 webview 没有足够的控制权。它只会开始加载,我们让它可见。
  • 我有一个 web 视图,但内容是静态的,我不从远程 url 加载它们......所以我不确定是什么问题 - 我在这里发送的问题是由于某些奇怪的原因,它不会使活动加载器消失
【解决方案2】:

为避免在新单元格中重复以前的数据,请使用唯一的 CellIdentifier。

    NSString *CellIdentifier = [NSString stringWithFormat:@"%i", indexPath.row];
    NewsCell *cell = (NewsCell *) [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
    if (cell == nil) 
    {   
        cell = [[ActivitiesCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier];
    }

在 NewsCell.m 文件中,使用以下代码并通过调用 initWithStyle 方法加载新单元格,而不是使用 loadNibNamed

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) 
        {
    // Initialization code. 
        }
        return self;
    }

【讨论】:

  • 这似乎不是一个好主意,因为它会在内存中创建许多单元格,而不是重复使用我想要的单个单元格 - 我只是想要一种方法来放置一些“加载" 滚动后更新数据。
  • 它将重复使用具有相同标识符的相同单元格。
  • 是的,但它仍然会为每个单元格创建一个标识符,不是吗?关键是所有单元格都有一个标识符-我认为。我对 UITableView 的经验相当缺乏:)
  • 对所有单元格使用一个标识符是您的问题的原因,即使您想遵循您的逻辑,您也可以在所有 NewCell 子视图的顶部使用一个空白的白色 UILabel 来覆盖所有控件要填充数据,隐藏UILabel即可。
  • 这或多或少是我试图做的但没有成功。无论如何,我会继续搞砸它。还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 2012-05-15
  • 2017-03-16
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多