从 UITableView 中取出可重用单元格

发布于 2024-10-01 19:45:35 字数 680 浏览 10 评论 0原文

为什么此代码可以正常工作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.text = [NSString stringWithFormat:@"cell%i%i", indexPath.section, indexPath.row];
    }    
    return cell;
}

据我了解单元格标识符,只有当我将 cell.textLabel.text = ... 行移出 if 语句时,此代码才能正常工作。换句话说,为什么标签有正确的文本???

Why this code works fine:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.text = [NSString stringWithFormat:@"cell%i%i", indexPath.section, indexPath.row];
    }    
    return cell;
}

As far as I understood cell identifiers, this code should work correctly only if I move cell.textLabel.text = ... line out of if-statement. In other words, why labels have correct texts???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倾其所爱 2024-10-08 19:45:35

尝试创建比您在屏幕上看到的更多的单元格,一旦它们出列,它们将不再具有您期望的文本...

对于您在屏幕上看到的 5 行左右基本上是没问题的,但一旦您开始滚动你会看到一些“有趣”的东西:)

Try creating more cells than you can see on your screen and as soon as they get dequeued they will no longer have the text you expect...

It will basically be okay for 5 or so rows you see on the screen but as soon as you start scrolling you'll be seeing some "interesting" stuff :)

波浪屿的海角声 2024-10-08 19:45:35

创建的单元格被重用。这意味着该对象被标记为可重用(从而节省了对象的完整创建过程)。

因此,一旦它滚动出屏幕,单元格就会被标记为可重用。因此,在创建新单元格之前,您首先检查是否有任何可重用单元格 ([tableView dequeueReusableCellWithIdentifier:)。

您需要设置的文本,因为它(可能)对于表格的每个单元格都是不同的,但与对象创建/销毁无关。

The created cell gets reused. This means that the object is marked for being reused (and thus saving you the complete creation of the object).

So once it scrolls out of the screen a cell is marked as reusable. Because of this, you first check if there are any reusable cells ([tableView dequeueReusableCellWithIdentifier:), before you create a new one.

The text you need to set, since it's (probably) different for every cell of your table, but has nothing to do with object creation/destruction.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文