【问题标题】:problem with a custom subclass of uitableviewuitableview 的自定义子类的问题
【发布时间】:2026-02-09 18:05:02
【问题描述】:

我正在编写 UITableView 的自定义子类。我需要这个对象本身是它自己的数据源和委托,然后这个子类将有它自己的数据源和委托。这样做主要是为了让我可以拦截对数据源的调用并委托并可能在将它们发送到实际数据源之前对其进行扩充。

我的班级是这样定义的。

CustomTableView : UITableView<UITableViewDelegate, UITableViewDataSource> {
   ...
   id customDataSource;
   id customDelegate;
}

当我尝试设置我的数据源和委托时出现问题。

我想覆盖 uitableview 的属性:

- (void)setDataSource(id<UITableViewDataSource>)ds {
   [super setDataSource:self]
   customDataSource = ds;
}

基本上,我想告诉父类(UItableView)将数据源设置为self。在我修改它们之后,我会将所有回调转发到 customDataSource。

[super setDataSource:self] 不会崩溃,但数据源永远不会被设置。有没有人有任何想法?谢谢

【问题讨论】:

    标签: uitableview ios


    【解决方案1】:

    我最终不需要使用这个问题中提出的方法,但我确实让它工作了。问题是我不小心合成了需要覆盖的属性,即dataSource和delegate。

    对于将来需要这样做的人,只需在您的自定义子类中覆盖 setDelegate 和 setDataSource。

    【讨论】:

      【解决方案2】:

      不要将数据源分配给自己。创建一个包含在 CustomTableView 中的中间对象,并将数据源设置为该对象。称它为 DataSourceInterceptor 什么的。

      实现此目的的另一种方法是对正在设置的数据源对象进行方法调配。

      【讨论】:

        最近更新 更多