【问题标题】:What to subclass from UITableView从 UITableView 子类化什么
【发布时间】:2011-12-15 14:32:54
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: uitableview datasource subclass


    【解决方案1】:

    您可以将 UITableViewCell 子类化,然后您必须以某种方式将 section&row 赋予单元格,以便它知道设置背景。

    但是,您也可以继承 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;
    }
    
    

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

    【讨论】:

    • 谢谢!这行得通。做得很好。我试图在我的自定义 tableView 中覆盖 setDataSource (以捕获 cellForRowAtIndexPath 方法),但我在将单元格设置在它们的位置时遇到了问题。但是您的解决方案要优雅得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多