我一直在 cellForRowAtIndexPath 调用中设置 UITableViewCell 的背景,如下所示:
CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:simple];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
for (id findCell in nib )
{
if ( [findCell isKindOfClass: [CustomCell class]])
{
cell = findCell;
}
}
UIView *cellBackView = [[UIView alloc] initWithFrame:CGRectZero];
UIView *cellSelectedBackView = [[UIView alloc] initWithFrame:CGRectZero];
if (UIUserInterfaceIdiomPad == UI_USER_INTERFACE_IDIOM()) {
cellBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_shadows_ipad_light.png"]];
cellSelectedBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"blue_cell.png"]];
}else {
cellBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_shadows.png"]];
cellSelectedBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"blue_cell.png"]];
}
cell.backgroundView = cellBackView;
cell.selectedBackgroundView = cellSelectedBackView;
现在我发现还有另一种方法可以实现这一点,那就是在这个委托中设置背景视图:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
// load the background image and set it as the background color as above
}
而且从 iOS5 开始,你可以只用 tableView 注册 nib,所以我也不需要循环查找类 nib。因此,在 viewDidLoad 中:
[self.tableView registerNib:[UINib nibWithNibName: @"CustomCellSplit" bundle:nil] forCellReuseIdentifier: @"CustomCellId"];
所以这行得通,它更简单,它是苹果推荐的加载单元格的笔尖和设置背景视图的方式。但是,我发现当您滚动列表时,每行都会调用这个 tableView: willDisplayCell: forRowAtIndexPath 。使用我之前加载背景视图的方式,它只会在创建单元格时设置背景视图(最多 8 或 10 次)。
因此,新方法听起来像是加载单元格和设置背景视图的性能较差的方法。这是正确的假设,还是我在这里遗漏了什么?