0

所以我有以下代码:

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 时)?

4

1 回答 1

1

上面的代码高效/干净吗?

如果我们得到的单元格来自可重复使用的卡片组,那么它将具有 UIActivityIndi​​cator 和正确的必要视图

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

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

是的

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

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

Apple's Table View Programming guide discusses this in depth: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/AboutTableViewsiPhone/AboutTableViewsiPhone.html#//apple_ref/doc/uid/TP40007451

Apple's sample project shows a couple different ways for managing table cells efficiently: https://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html

于 2012-04-23T22:03:53.410 回答