3

我尝试将背景图像添加到我的UITableViewCell. 这是我正在使用的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"TableCell";

    // Dequeue or create a cell of the appropriate type.
    TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.backgroundView =  [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbg.jpeg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];
    cell.selectedBackgroundView =  [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbg.jpeg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];

    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    [cell.preparationLabel setFont:[UIFont fontWithName:@"Bold" size:20]];

    // Configure the cell.
    if (btnselected==1)
    {
        cell.preparationLabel.text = [recipe.ingredients objectAtIndex:indexPath.row];
    }
    else
    {
     cell.preparationLabel.text = [recipe.preparation objectAtIndex:indexPath.row];
    }
    return cell;
}

我的问题是,在运行应用程序并选择表格视图时,它首先显示具有默认白色背景的表格单元格,一段时间后单元格背景将更改为所需的图像......我不知道为什么需要很长时间才能用我想要的单元格背景加载表格视图

4

4 回答 4

6

加载缓慢是因为您UIImageView每次都将其添加到单元格中,而不是仅在创建新单元格时添加。

更改您的代码如下:

   // Dequeue or create a cell of the appropriate type.
    TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

        cell.backgroundView =  [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbg.jpeg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];
        cell.selectedBackgroundView =  [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbg.jpeg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];
    }
于 2013-03-21T10:24:55.423 回答
3

你需要搬家

cell.backgroundView =  [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbg.jpeg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];
cell.selectedBackgroundView =  [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cellbg.jpeg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];

行到if (cell == nil)...条件之后。否则,单元格只有在被回收后才能获得新的背景,而新创建的单元格仍然没有背景。

于 2013-03-21T10:25:06.260 回答
2
if (cell == nil) 
{
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];

        UIImageView *imgView1 = [[UIImageView alloc]init];..continue...
        UIImageView *imgView2 = [[UIImageView alloc]init];..continue...

        [cell.backgroundView addSubView:imgView1];
        [cell.selectedBackgroundView addSubView:imgView2];
        cell = [nib objectAtIndex:0];
}
于 2013-03-21T10:26:17.713 回答
0
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    UIImageView *ivwCellHighlighted = [[UIImageView alloc]initWithImage:[UIImage imageNamed:CELL_SELECTEDIMAGE]];
    [ivwCellHighlighted setFrame:CGRectMake(1, 1, 320, 47)];
    [cell setSelectedBackgroundView:ivwCellHighlighted];
    [ivwCellHighlighted release];
    ivwCellHighlighted=nil;


}
于 2013-03-21T10:44:22.450 回答