所以我有以下代码:
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;
我的问题是,上面的代码是高效/干净的吗?我问的原因是因为如果我们获得的单元格来自可重用的套牌,那么它将具有UIActivityIndicator并且其中包含必要的视图吗?我是否只需要在分配新单元格时添加子视图(即:当单元格== nil时)?
答案 0 :(得分:1)
是高效/干净的代码吗?
没有
如果我们获得的单元格来自可重复使用的套牌,则它将具有UIActivityIndicator并且其中包含必要的视图
是的,但由于您使用的是通用的UITableViewCell,因此在添加一次后,您将无法访问UIActivityIndicator。您需要创建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