我正在构建一个带有搜索栏的普通样式表视图,而我在Apple的表视图中无法复制“装订线”的外观(当拖动表格视图时)。
Contacts screenshot http://img200.imageshack.us/img200/2633/picture5m.png
如果我设置表格视图的背景颜色,排水沟看起来很好,但我的单元格使用该颜色作为背景颜色。
我已尝试在tableView:cellForRowAtIndexPath:
中设置单元格和单元格contentView的背景颜色,但稍后会覆盖它。我也尝试创建一个空视图并将其设置为单元格的backgroundView和contentView的子视图,但只有边缘为白色。
我能想到两种解决方案:
这两种解决方案都需要相当多的工作。有更简单的方法吗?
更新:第一个解决方案无效。我必须将表格视图的背景颜色设置为clearColor,以便将装订线更改为视图的颜色。但是,当我这样做时,我得到的结果与在表视图上设置backgroundColor相同。
答案 0 :(得分:10)
有一个名为-tableView:willDisplayCell:forRowAtIndexPath:
的委托方法,可用于在表格视图进行修改后自定义单元格的背景颜色。来自UITableViewDelegate reference:
表视图在使用单元格绘制行之前将此消息发送到其委托,从而允许委托在显示之前自定义单元格对象。此方法为委托提供了覆盖表视图前面设置的基于状态的属性的机会,例如选择和背景颜色。委托返回后,表视图仅设置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;
答案 1 :(得分:0)
通常我在显示表视图时一直使用多个视图控制器。我使用UIViewController子类来控制整个视图和任何条形或按钮(任何与表视图无关的东西)。然后我创建一个UITableViewController来只控制表。
这有几个影响:
首先,它允许我更好地封装行为。 UITableViewController更加清洁和便携。
其次,你会得到一个真正的UIView来处理你遇到的问题。这似乎更多的工作,但允许更大的定制。你可以为背景做任何你想做的事。
第三,它允许我更容易地使用XIB作为主视图,而不用担心UITableView内容(可能是网络加载或不加载,或者有其他加载问题)。
所以我的建议,将是你的第一个解决方案。但是你应该一直这样做,而不仅仅是当你认为你需要额外的灵活性时。这样就已经到位了。
答案 2 :(得分:0)
只需在UIView中放入Tableview和搜索栏(将UITableViewController设为UIViewController),然后将视图背景设置为IB或代码中所需的颜色。
答案 3 :(得分:0)
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];