自定义UITableViewCell backgroundView& selectedBackgroundView

时间:2012-02-16 16:16:51

标签: uitableview uikit

我希望将UITableView设置为样式,如果它具有样式UITableViewStyleGrouped但具有一些细微差别(如不同的颜色和圆角较短的半径)。行具有可变高度。我想在我的应用程序中为大多数表视图控制器使用此自定义样式。查看Twitter,Groupon和& GitHub以示例的方式发布应用程序。

我该怎么做?

我正在考虑像UITableViewStyleGrouped那样做。 UITableViewStyleGrouped设置backgroundView& selectedBackgroundView UIGroupTableViewCellBackground的实例UIViewUIGroupTableViewCellBackground的子类)。 drawLayer:是其图层的委托,并实施CGImageRef将其图层内容设置为CGImageRef

  1. 我很确定Apple会根据Quartz 2D Programming Guide : Creating a Bitmap Graphics Context创建此CGLayer,这也建议考虑使用UITableViewStyleGrouped而不是绘制到位图图形上下文。哪个更适合这个应用程序?

  2. 此外,UIImageView表格视图的第一个单元格使用UIImage将带有圆角的阴影添加到其顶部(它将其设置为可调整大小(宽度方向){{ 1}}带有半透明的PNG文件。)为什么这样做?这不是慢滚动吗?为什么不将它绘制到第一个单元格的CGImageRef?也许性能的下降并不显着,并且使用图像更容易使细胞看起来更正确。我将单元格的CGImageRef保存到磁盘并使用预览打开它。它仍然有圆角。这个重叠的视图只是添加了顶部阴影。

    下面是在我的设备上运行Core Graphics Instruments工具的屏幕截图,其中为UITableViewStyleGrouped表视图选择了“Color Blended Layers”。你可以看到顶部的阴影是混合的。并且,看起来在最后一个单元格中也有一些混合。

    enter image description here

    enter image description here

    选择第三个单元格(不混合)。选择第一个或最后一个单元格的行为相同,但不会删除已经混合的重叠视图。

    enter image description here

1 个答案:

答案 0 :(得分:0)

您可以计算正在绘制的行数,并将图像设置为单个单元格的背景。

你要做的是

cell.backgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_normal.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];
cell.selectedBackgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_pressed.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];

使用此方法设置背景图像

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath  
{      

      &&&&


     if((indexPath.row)==0)  
         // set image upper corner image here

     else if (indexPath.row==1)  
        //set normal image here

     else if (indexPath.row==YourArray)
        // also set the lower corner round image in the last low, which can be calculated by comparing indexpath.row to the mutablearray/array

}

你也可以在&&&&如果是array.count == 1

,则应用不同的图像,其中上下角都是圆的