假设我有10个tableView,它们都需要第一个单元格的背景,在所有部分中,颜色设置为红色。
为了不对所有10个表视图手动执行,我认为我应该继承UITableView。
我的问题是:我应该从UITableView覆盖什么?
或者我应该继承UITableViewCell并且所有单元格都从这里继承?
感谢。
答案 0 :(得分:0)
您可以继承UITableViewCell,然后您必须以某种方式将部分和行放到单元格中,以便它知道设置背景。
但是,您也可以继承UITableView。如果你选择UITableView的子类,下面是一个解决方案,但最终它是你的决定。
我现在能想到的唯一方法是以某种方式捕获对tableView数据源的所有请求,以便您可以操作结果。
你可以这样做:
子类UITableView,我们这样称它为MyUITableView:
添加成员变量id<UITableViewDataSource> myDataSource
,以及设置为IBOutlet的此变量的属性。然后在Interface Builder中,您应该使用此属性而不是标准的uitableview数据源属性来连接表视图。
在init
或loadView
的某处,写下self.dataSource = self
。我们的想法是捕获所有请求(特别是cellForRowAtIndexPath
),以便您可以操纵实际结果。
在您的子类中,实现UITableViewDataSource协议,并将所有调用转发给myDataSource对象。
唯一的例外是在cellForRowAtIndexPath
实现中,从myDataSource获得结果后,如果满足特定条件,则可以更改背景颜色。请参阅下面的示例代码
@interface MyUITableView : UITableView {
id<UITableViewDataSource> myDataSource;
}
@property (nonatomic, retain) IBOutlet id<UITableViewDataSource> myDataSource;
@end
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Get the result from the actual data source
UITableViewCell* cell = nil;
if (myDataSource)
cell = [myDataSource tableView:self cellForRowAtIndexPath:indexPath];
// If you condition is met, then just modify the cell in some way
if (indexPath.section == 0 && indexPath.row == 0)
cell.contentView.backgroundColor = [UIColor redColor];
return cell;
}
这几乎是你所需要的。我不知道我是否足够清楚,但如果你有任何问题请不要犹豫。