自定义 UITableViewCell 删除子视图

Posted

技术标签:

【中文标题】自定义 UITableViewCell 删除子视图【英文标题】:Custom UITableViewCell Removing a subview 【发布时间】:2010-10-19 14:08:27 【问题描述】:

所以我有一个问题并且确切地知道是什么导致它,只是不知道如何解决它。基本上我有一个 tableViewCell 正在加载这样的东西:

BroadcastTableViewCell *cell = (BroadcastTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

/*
 * Other code to finish cell setup
 *
 */

// Problem section
CGRect frame;
    frame.size.width=50; frame.size.height=70;
    frame.origin.x=0; frame.origin.y=0;
    AsyncImageView* asyncImage = [[[AsyncImageView alloc]
                                   initWithFrame:frame] autorelease];
    asyncImage.tag = 999;
    NSURL *url = [[[NSURL alloc] initWithString:[NSString stringWithFormat:@"http://image URL/%@", trimmedPath]] autorelease];      
    [asyncImage loadImageFromURL:url];
    [cell.contentView addSubview:asyncImage];

基本上这是一种异步加载单元格图像的方法,以便表格视图平滑滚动。问题是,当我将具有现有 ID 的新单元格出列时,图像不会被重置并被放置在新单元格下。有谁知道如何检测该图像并在新单元出列时将其删除?

【问题讨论】:

【参考方案1】:

只需使用 viewWithTag: 在子视图中搜索您的 AsyncImageView

AsyncImageView* asyncImage = [cell.contentView viewWithTag:999];
if (asyncImage == nil) 
  CGRect frame;
  frame.size.width=50; frame.size.height=70;
  frame.origin.x=0; frame.origin.y=0;
  asyncImage = [[[AsyncImageView alloc] initWithFrame:frame] autorelease];
  asyncImage.tag = 999;
  [cell.contentView addSubview:asyncImage];
 else 
  // might want to cancel download here somehow


NSURL *url = [[[NSURL alloc] initWithString:[NSString stringWithFormat:@"http://image URL/%@", trimmedPath]] autorelease];      
[asyncImage loadImageFromURL:url];

【讨论】:

太棒了,这实际上很有意义,因为这就是我首先添加标签的原因 XD 感谢您的帮助! 这实际上也有助于提高效率。 :) 赢/赢。

以上是关于自定义 UITableViewCell 删除子视图的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UITableViewCell 子视图布局

自定义 UITableViewCell - 似乎无法添加子视图

在自定义 UITableViewCell 的子视图中添加 UIViewController

自定义 UITableViewCell 打开不同的 xib 子视图

UITableViewCell 自定义类 - 更改子视图高度约束后重新加载单元格高度

从 xib 添加自定义视图作为子视图时,UITableViewCell 的高度错误