如何在UITableCellView中设置imageView属性以仅显示背景颜色?

时间:2012-03-05 12:05:24

标签: ios uitableview background uiimageview uiimage

我有一个继承自UITableViewCell类的自定义类,如果图像不可用,则显示图像(左侧为标题)或一般的深色方块。以下代码显示浅色单元格背景上的黑色方块:

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(11, 6, 40, 40)];
[imageView setBackgroundColor:kBackgroundGreyColour];
[cell.contentView addSubview:imageView];

但是,我不想在每个表格单元格中创建自定义子视图,而是希望使用通用UITableViewCell类的现有imageView属性,并以某种方式对其进行修改,以便像上面的代码一样显示正方形。这就是我现在正在尝试的事情:

UIImageView* iv = [[UIImageView alloc] initWithFrame:CGRectMake(11, 6, 40, 40)];
[iv setBackgroundColor:[UIColor redColor]];
self.imageView.hidden = NO;
self.imageView.opaque = iv.opaque;
self.imageView.alpha = iv.alpha;
self.imageView.image = iv.image;
[self bringSubviewToFront:self.imageView];
[self.imageView setBackgroundColor:[UIColor redColor]];

我添加了所有这些行,将尽可能多的现有UIImageView属性设置为与第一个代码段中创建的UIImageView实例相同的值,但第二个代码段未显示任何黑暗的广场。它根本没有显示任何内容,单元格看起来只有浅色背景,没有可见的图像视图。但是我看到imageView属性不是nil所以在第二个代码片段中执行所有这些代码行应该显示一些东西吗?

但是,只要我将新图像分配给imageView属性(例如self.imageView.image = [[UIImage alloc] init ...],该方块就会毫无问题地显示分配的图像。

编辑:请注意,在第二种情况下,我在layoutSubview函数中设置imageView的框架,例如:

-(void)layoutSubviews
{
    [super layoutSubviews];
    self.imageView.frame = CGRectMake(11, 6, 40, 40);
}

所以我的问题是: 1.我需要设置现有imageView属性的哪些属性以及哪些值,以便代码显示填充特定颜色的方块(如第一段代码所示)?

  1. 有没有办法以编程方式创建UIImage,以便它只显示背景颜色而没有任何与之关联的图像(我可以使用它来设置imageView.image属性以显示该颜色)。

  2. 是否可以使用自定义视图替换UITableViewCell类中的现有imageView属性,而无需添加自定义子视图(如第一个代码段所示),以便我可以显示占位符UIView图像不可用时的背景色?

1 个答案:

答案 0 :(得分:2)

您的代码无法正常工作的原因正如您所猜测的那样;因为当您设置图像视图的背景颜色时,它不会在图像属性上创建任何内容 并且,您已经发现您无法直接设置单元格的imageview属性。

我说你最好的选择,是前选项;以编程方式创建UIImage。 虽然,我强烈建议您只需在自己喜欢的图像编辑软件中创建一个,然后将其包含在捆绑中。它可以在以后轻松更换,因为您可以获得更好的图像,而且无需更换代码和工作。

但如果您仍然希望以编程方式完成所有操作,那么它并不像您希望的那样简单。

CGRect rect = CGRectMake(11, 6, 40, 40);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, [kBackgroundGreyColour CGColor]);
CGContextFillRect(context, rect);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.imageview.image = image;

应该做的伎俩 这定义了图像大小,创建图形上下文(将其视为画布),选择要使用的灰色,使用它绘制画布,然后将其扫描到计算机中,使其成为您想要的小尺寸。

小绿色影片在屏幕后面完成了这一切(对不起,Terry Pratchett太多了。)