什么从UITableView继承

时间:2011-10-26 09:42:17

标签: uitableview datasource subclass

假设我有10个tableView,它们都需要第一个单元格的背景,在所有部分中,颜色设置为红色。

为了不对所有10个表视图手动执行,我认为我应该继承UITableView。

我的问题是:我应该从UITableView覆盖什么?

或者我应该继承UITableViewCell并且所有单元格都从这里继承?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以继承UITableViewCell,然后您必须以某种方式将部分和行放到单元格中,以便它知道设置背景。

但是,您也可以继承UITableView。如果你选择UITableView的子类,下面是一个解决方案,但最终它是你的决定。

我现在能想到的唯一方法是以某种方式捕获对tableView数据源的所有请求,以便您可以操作结果。

你可以这样做:

  • 子类UITableView,我们这样称它为MyUITableView:

  • 添加成员变量id<UITableViewDataSource> myDataSource,以及设置为IBOutlet的此变量的属性。然后在Interface Builder中,您应该使用此属性而不是标准的uitableview数据源属性来连接表视图。

  • initloadView的某处,写下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;
}

这几乎是你所需要的。我不知道我是否足够清楚,但如果你有任何问题请不要犹豫。