【问题标题】:Setting background image for cell using background color method not working使用背景颜色方法为单元格设置背景图像不起作用
【发布时间】:2012-07-27 06:23:32
【问题描述】:

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

我已经知道UITableViewCell 的苹果文档明确表示:

注意:如果要更改单元格的背景颜色(通过 UIView 声明的 backgroundColor 属性设置单元格的背景颜色),必须在 tableView:willDisplayCell:forRowAtIndexPath: 方法中进行委托而不是数据源的 tableView:cellForRowAtIndexPath:。

上面的描述也可以看here

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

if (cell == nil) 
{
   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifier] autorelease];
   cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"buttonbg.png"]];
}

但是使用背景颜色将背景图像设置为表格视图单元格不起作用 当我尝试更改图像而不是颜色时,为什么上述方法/属性在数据源方法中不起作用(索引路径处的行单元格)

同样令我惊讶的是,我发现使用图像视图并将视图设置为单元格的背景视图非常完美,Ammy Worral 先生在link 中也提出了同样的建议。即:

UIImage *cellImage = [UIImage imageNamed:kCellImage];
UIImageView *cellImageView = [[UIImageView alloc]initWithImage:cellImage];
[cell setBackgroundView:cellImageView];

但我的疑问是为什么背景图片不能与单元格的背景颜色方法一起使用!

需要对此进行澄清!

提前谢谢大家:)

【问题讨论】:

    标签: iphone uitableview background-image


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复,我明白了您的意思,但即使在 tableView:willDisplayCell:forRowAtIndexPath: 方法中,UITableView 也会进行修改,那么为什么在那里同样工作并且在 cellForRowAtIndexPath 中没有影响方法
    • 我不是在问子类化和你给 H2CO3 先生的解决方案,我说的是你给出的为什么背景颜色属性在数据源方法中不起作用的原因!正如你所说的 tableView 做了一些对单元格外观的修改,类似的也适用于委托方法,即 tableView:willDisplayCell:forRowAtIndexPath: 为什么颜色属性在这里工作而不是在数据源方法中工作,我在问它,谢谢 :)
    • @EshwarChaitanya 啊 OK :) 那是因为(我假设)关于 UI 的修改是在某处完成的,之后不会进一步修改属性。
    • 表需要单元格实例来修改它,因为 cellForRow 是创建/出列实例的对象,它只能在调用之后发生。
    • @EshwarChaitanya 添加图像视图有效,因为表格视图不知道您的单元格上有另一个子视图,因此不会触摸它。 willDisplayCell 方法旨在执行您想要的操作,因为在调用该方法后,表格视图不会修改单元格。但是,在调用 cellForRowAtIndexPath 之后,将进行修改。整个工作流程是这样的:cellForRowAtIndexPath,修改,willDisplayCell,实际显示单元格。
    【解决方案2】:

    tableview 会自动将单元格的背景颜色设置为它自己的颜色。它在 -tableView:cellForRowAtIndexPath: 之后这样做,当然:) 你有两个选择: 1)在你的单元格中添加一个额外的视图并设置它的背景颜色(几乎你做了什么) 2)在您的数据源/委托中实现 -tableView:willDisplayCellAtIndexPath: (或其中的一些内容,具体名称请参见苹果文档)并手动设置单元格的背景颜色。

    【讨论】:

    • Sorry Mr.kra 我特别提到我关心的不是设置/更改单元格的背景颜色,而是借助单元格的背景颜色属性设置图像,请再次浏览我的帖子以及我在下面为H2CO3先生的答案留下的cmets,这样就很清楚了:)
    • 我明白你的帖子,你想设置单元格的背景颜色。颜色实际上是图案图像的事实与此处无关 :) 该表将在 cellForRowAtIndexPath 之后将单元格的颜色设置为其自己的颜色。之所以这样做,是因为它需要一个单元格来更改单元格的背景。所以在 cellForRow 中设置颜色不会有效果,因为表格会覆盖它。之后的任何调用都可以正常工作(即 willDisplayCellAtIndexPath 工作正常)
    • 是的,H2CO3 先生让我更清楚了,无论如何 +1 的回答和关注,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多