Iphone 使用背景色方法设置单元格的背景图像无效

Iphone 使用背景色方法设置单元格的背景图像无效,iphone,uitableview,background-image,Iphone,Uitableview,Background Image,我有一个包含“n”个单元格的表视图。我的问题是单元格的背景图像 我已经意识到,苹果的文档中明确指出: 注意:如果要更改单元格的背景色(通过UIView声明的backgroundColor属性设置单元格的背景色),必须在代理的tableView:willDisplayCell:ForRowatineXpath:方法中更改,而不是在数据源的tableView:CellForRowatineXpath:中更改。 还可以看到上述描述 但我关心的不是改变单元格的颜色,而是设置单元格的背景图像。我们知道,我

我有一个包含“n”个单元格的表视图。我的问题是单元格的背景图像

我已经意识到,苹果的文档中明确指出:

注意:如果要更改单元格的背景色(通过UIView声明的backgroundColor属性设置单元格的背景色),必须在代理的tableView:willDisplayCell:ForRowatineXpath:方法中更改,而不是在数据源的tableView:CellForRowatineXpath:中更改。

还可以看到上述描述

但我关心的不是改变单元格的颜色,而是设置单元格的背景图像。我们知道,我们可以使用“背景颜色”属性设置背景图像,即:

if (cell == nil) 
{
   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifier] autorelease];
   cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg.png"]];
}
但使用背景色将背景图像设置为表视图单元格不起作用 当我试图更改图像而不是颜色时,为什么上面的方法/属性在datasource方法(索引路径处的行的单元格)中不起作用

同样令我惊讶的是,我发现使用图像视图并将视图设置为单元格的背景视图效果非常好,这也是Ammy Worral先生的建议。i、 e:

UIImage *cellImage = [UIImage imageNamed:kCellImage];
UIImageView *cellImageView = [[UIImageView alloc]initWithImage:cellImage];
[cell setBackgroundView:cellImageView];
但我的疑问是,为什么背景图像不能用细胞的背景色方法工作呢

需要澄清一下


提前感谢:)

它不起作用,因为在您从cellForRowAtIndexPath返回单元格后,UITableView会对其外观进行一些修改:。解决方案是对单元格进行子类化,覆盖layoutSubviews方法并在其中进行自定义。

tableview将自动将单元格的背景颜色设置为自己的颜色。它会在-tableView:cellforrowatinexpath:,当然:)之后执行此操作 您有两个选择: 1) 在单元格中添加一个额外的视图并设置其背景色(与您所做的差不多)
2) 实现-tableView:willDisplayCellAtIndexPath:在数据源/委托中(或这些行中的某些行,请参阅apple docs以获取确切名称),并手动设置单元格的背景色。

感谢您的回答,我明白您的意思,但即使在tableView:willDisplayCell:ForRowatinexPath:方法中,UtableView将进行修改na,那么为什么同样的操作在cellForRowAtIndexPath方法中没有影响我不是在问子类化和您给H2CO3先生的解决方案,我是在谈论您给出的为什么背景色属性在datasource方法中不起作用的原因!正如您所说,tableView对单元格外观进行了一些修改,类似的修改也适用于委托方法na,即tableView:willDisplayCell:ForRowatineXpath:为什么颜色属性在这里工作而不是在数据源方法中工作,我想问一下,谢谢:)@EshwarChaitanya啊,好的:)这就是原因(我假设)关于UI的修改是在某个地方完成的,之后不会进一步修改属性。表需要单元格实例来修改它,因为cellForRow是创建/取消实例队列的对象,它只能在该调用之后发生。@EshwarChaitanya添加图像视图是有效的,因为表视图不知道您的单元格上还有另一个子视图,所以不接触它。willDisplayCell方法被设计为执行您想要的操作,因为在调用该方法之后,表视图不会修改单元格。但是,在调用CellForRowatineXpath之后,将进行修改。整个工作流程是这样的:cellForRowAtIndexPath,modifications,willDisplayCell,实际显示单元格。对不起,kra先生,我特别提到我关心的不是设置/更改单元格的背景色,而是通过单元格的背景色属性设置图像,请再次浏览我的帖子和我在下面留下的评论,以获得H2CO3先生的答案,这样会更清楚:)我理解你的帖子,你想设置单元格的背景色。颜色实际上是图案图像的事实与此无关:)表格将在CellForRowatineXpath之后将单元格的颜色设置为自己的颜色。它这样做的原因是因为它需要一个单元格来改变单元格的背景。因此,在cellForRow中设置颜色将无效,因为表格将覆盖该颜色。之后的任何电话都会起作用(即willDisplayCellAtIndexPath工作正常)是的,我理解,H2CO3先生对我说得更清楚,回答和关心的任何方式+1,谢谢:)