将子视图添加到单元格contentView

时间:2012-04-23 21:57:49

标签: iphone objective-c ios ipad uitableview

所以我有以下代码:

static NSString *CellIdentifier = @"RecommendationCell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TableViewCell"] autorelease];
    }

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [indicator setCenter:CGPointMake(0, 15)];
    [indicator startAnimating];
    [indicator hidesWhenStopped];

    UILabel *someLabel......... 


    UIView *containerView = [[UIView alloc] initWithFrame:CGRectZero];
    [containerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    [containerView setAutoresizesSubviews:YES];
    [containerView setBackgroundColor:[UIColor clearColor]];
    [containerView addSubview:indicator];
    [containerView addSubview:someLabel];
    [containerView setFrameSize:CGSizeMake(indicator.frameWidth+self.loadingGeniusLabel_.frameWidth, 30)];
    [containerView setCenter:CGPointMake(cell.contentView.center.x, 15)];

    [cell.contentView addSubview:containerView];

    [indicator release];
    [containerView release];

    return cell;

我的问题是,上面的代码是高效/干净的吗?我问的原因是因为如果我们获得的单元格来自可重用的套牌,那么它将具有UIActivityIndi​​cator并且其中包含必要的视图吗?我是否只需要在分配新单元格时添加子视图(即:当单元格== nil时)?

1 个答案:

答案 0 :(得分:1)

  

是高效/干净的代码吗?

没有

  

如果我们获得的单元格来自可重复使用的套牌,则它将具有UIActivityIndi​​cator并且其中包含必要的视图

是的,但由于您使用的是通用的UITableViewCell,因此在添加一次后,您将无法访问UIActivityIndi​​cator。您需要创建UITableViewCell的子类才能有效地执行此操作。

  

我是否只需要在分配新单元格时添加子视图(即:当单元格== nil时)?

如果你绝对需要,只在if(cell == nil)块之外调用addSubview,这是一个昂贵的方法调用,并且在滚动表时会严重影响你的每秒帧数。

你最好的选择是继承UITableViewCell。这样,您需要以不同的方式控制单元格到单元格的值/行为的任何对象/ UIViews(或UIView子类)更适合作为UITableViewCell子类的属性。通过这样做,您可以在xib文件或单元设置(在if语句中)实例化它们,然后只需更改每个单元格的值(而不是每次都创建新对象)。

Apple的Table View编程指南深入讨论了这一点: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/AboutTableViewsiPhone/AboutTableViewsiPhone.html#//apple_ref/doc/uid/TP40007451

Apple的示例项目显示了几种有效管理表格单元格的方法: https://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html