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

Mar*_*don 0 iphone cocoa-touch objective-c uitableview

我正在构建一个带有搜索栏的普通样式表视图,而我在Apple的表视图中无法复制"装订线"的外观(当拖动表格视图时).

联系人截图http://img200.imageshack.us/img200/2633/picture5m.png

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

我已经尝试设置单元格和单元格的contentView的背景颜色tableView:cellForRowAtIndexPath:,但它稍后会被覆盖.我也尝试创建一个空视图并将其设置为单元格的backgroundView和contentView的子视图,但只有边缘为白色.

我能想到两种解决方案:

  • 将我的UITableViewController子类转换为UIViewController,并在表视图后面插入一个空白视图.
  • 创建一个不允许覆盖backgroundColor的UITableViewCell子类.

这两种解决方案都需要相当多的工作.有没有更简单的方法?

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

Mar*_*don 10

调用-tableView:willDisplayCell:forRowAtIndexPath: 了一个委托方法,可以在表视图进行修改后自定义单元格的背景颜色.从UITableViewDelegate参考:

表视图在使用单元格绘制行之前将此消息发送到其委托,从而允许委托在显示单元格对象之前对其进行自定义.此方法为委托提供了覆盖表视图前面设置的基于状态的属性的机会,例如选择和背景颜色.委托返回后,表视图仅设置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;
Run Code Online (Sandbox Code Playgroud)