我正在编写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]没有崩溃,但数据源永远不会被设置。有没有人有任何想法?感谢
答案 0 :(得分:2)
我最终不需要使用此问题中提出的方法,但我确实让它工作了。问题是我偶然合成了需要覆盖的属性,即dataSource和delegate。
对于将来需要这样做的人,只需在自定义子类中覆盖setDelegate和setDataSource。
答案 1 :(得分:0)
不要将数据源分配给self。创建一个包含在CustomTableView中的中间对象,并将数据源设置为该对象。称之为DataSourceInterceptor或其他东西。
实现此目标的另一种方法是方法调用正在设置的数据源对象。