UITableViewCell背景图片设置

时间:2013-03-21 10:20:41

标签: ios objective-c cocoa-touch uitableview

我尝试将背景图片添加到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;
}

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

4 个答案:

答案 0 :(得分:5)

缓慢加载是因为您每次都将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] ];
    }

答案 1 :(得分: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)...条件之后的行。否则,单元格在被回收后才会获得新背景,而新创建的单元格仍然没有背景。

答案 2 :(得分: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];
}

答案 3 :(得分: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;


}