Iphone 是否在普通样式表视图上设置UITableViewCell背景色?

Iphone 是否在普通样式表视图上设置UITableViewCell背景色?,iphone,objective-c,cocoa-touch,uitableview,Iphone,Objective C,Cocoa Touch,Uitableview,我正在用搜索栏构建一个普通样式的表视图,但在复制Apple的表视图中的“边沟”(当表视图向下拖动时)时遇到了问题 如果设置表视图的背景色,则边沟看起来很好,但我的单元格使用该颜色作为背景色 我已尝试在表视图:cellforrowatinexpath:中设置单元格和单元格内容视图的背景色,但在稍后的某个时候会被覆盖。我还尝试创建一个空视图,并将其设置为单元格的背景视图和contentView的子视图,但只有边缘是白色的 我可以想到两种解决方案: 将我的UITableViewController

我正在用搜索栏构建一个普通样式的表视图,但在复制Apple的表视图中的“边沟”(当表视图向下拖动时)时遇到了问题

如果设置表视图的背景色,则边沟看起来很好,但我的单元格使用该颜色作为背景色

我已尝试在
表视图:cellforrowatinexpath:
中设置单元格和单元格内容视图的背景色,但在稍后的某个时候会被覆盖。我还尝试创建一个空视图,并将其设置为单元格的背景视图和contentView的子视图,但只有边缘是白色的

我可以想到两种解决方案:

  • 将我的UITableViewController子类转换为UIViewController,并在表视图后面插入空白视图
  • 创建不允许覆盖backgroundColor的UITableViewCell子类
这两种解决方案都需要大量的工作。有没有更简单的方法


更新:第一个解决方案不起作用。我必须将表格视图的背景色设置为clearColor,以便将边沟更改为视图的颜色。但是,当我这样做时,我得到的结果与在表视图上设置背景颜色相同。

通常,我在显示表视图时使用多个视图控制器。我使用UIViewController子类来控制整个视图和任何栏或按钮(任何与表视图无关的内容)。然后,我创建一个UITableViewController来仅控制表

这有几个影响:

首先,它允许我更好地封装行为。UITableViewController更干净、更便携

第二,你得到了一个真实的UIView来处理像你所遇到的问题这样的问题。这似乎需要更多的工作,但允许更多的定制。你可以做任何你想做的背景

第三,它使我可以更轻松地将XIB用于主视图,而不必担心UITableView内容(可能是网络加载的,也可能没有网络加载的,或者有其他加载问题)


所以我的建议,将是你的第一个解决方案。但是你应该一直这样做,而不仅仅是在你认为你需要额外的灵活性的时候。这样它就已经就位了。

只需将Tableview和搜索栏放在UIView中(将UITableViewController设置为UIViewController),并将视图背景设置为IB或代码中所需的颜色。

有一个名为
-Tableview:willDisplayCell:forRowAtIndexPath:
,可用于在表视图进行修改后自定义单元格的背景色。从:

表视图在使用单元格绘制行之前将此消息发送给其委托,从而允许委托在显示单元格对象之前对其进行自定义。此方法使代理有机会覆盖先前由表视图设置的基于状态的属性,例如选择和背景色。代理返回后,表视图仅设置alpha和frame属性,然后仅设置行滑入或滑出时的动画

此外,由于在尝试滚动过最后一个单元格时背景颜色从表格底部向外窥视,因此我必须创建页脚视图并更新表格视图的内容插入:

UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
footerView.backgroundColor = [UIColor whiteColor];
self.tableView.tableFooterView = footerView;
[footerView release];

UIEdgeInsets inset = self.tableView.contentInset;
inset.bottom = 44 - footerView.frame.size.height;
self.tableView.contentInset = inset;

你所说的“但它会在以后某个时候被覆盖”是什么意思?是什么覆盖了它?一个内部UIKit方法覆盖了它,在调用CellForRowatineXpath和在屏幕上绘制视图以及用户可以与应用程序交互之间的某个地方。这是迄今为止我找到的最好的解决方案,但必须有更干净的方法。页脚表示正常的“空单元格”不会出现在tableView中。空白区域将是平坦的白色(或您选择的任何颜色)。inset.bottom也不需要额外的44像素。这将在tableView的底部留下一个空白的边沟。inset.bottom=-footerView.frame.size.height使tableView的“底部”成为最后一行。当使用“淡入淡出”动画样式删除单元格时,当单元格消失时,您将看到颜色闪烁。所以一定要用“上”或“下”等等。我今天早上才明白这一点。有一个更简单更干净的解决方案。不需要改变颜色和设置单元格背景,只需创建一个与上述footView类似的tableHeaderView,其中包含搜索栏。工作完美。没有混乱。不用大惊小怪。不过,这似乎仍然是一个黑客解决方案。只是一个小黑客。
UIView *myView = [[UIView alloc] initWithFrame:cell.frame];
myView.backgroundColor = [UIColor colorWithRed:214.00/255.00 green:233.00/255.00 blue:247.00/255.00 alpha:1.0];
cell.backgroundView = myView;
[myView release];