无法在Custom UITableView类中使用Custom UITableViewDataSource

时间:2013-03-12 22:44:41

标签: ios uitableview

我正在尝试使用自己的自定义UITableView创建一个扩展DataSource的类。

该类名为SHCTableView

首先,我创建了一个名为SHCTableViewDataSource.h的原型类,它扩展了NSObject

现在我将属性添加到SHCTableView.h

// the object that acts as the data source for this table
@property (nonatomic, assign) id<SHCTableViewDataSource> dataSource;

我收到了警告

  

Property type 'id<SHCTableViewDataSource>' is incompatible with type 'id<UITableViewDataSource>' inherited from 'UITableView'

SHCTableView.m

const float SHC_ROW_HEIGHT = 50.0f;

-(void)refreshView {
  // set the scrollview height
  _scrollView.contentSize = CGSizeMake(_scrollView.bounds.size.width, [_dataSource numberOfRows] * SHC_ROW_HEIGHT);

  // add the cells
  for (int row=0; row < [_dataSource numberOfRows]; row++) {

    // obtain a cell
    UIView* cell = [_dataSource cellForRow:row];

    // set its location
    float topEdgeForRow = row * SHC_ROW_HEIGHT;
    CGRect frame = CGRectMake(0, topEdgeForRow, _scrollView.frame.size.width, SHC_ROW_HEIGHT);
    cell.frame = frame;

    // add to the view
    [_scrollView addSubview:cell];

  }

}

#pragma mark - property setters
-(void)setDataSource:(id<SHCTableViewDataSource>)dataSource {

  _dataSource = dataSource;
  [self refreshView];

}

_dataSource的所有实例都给我一个错误:

  

Instance variable '_dataSource' is private

还有一堆其他错误,但它们似乎都是由于_dataSource是私有的,这可能与上面的警告有关。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

UITableView已经声明了dataSource,所以声明为同名并不是一个好主意。只需声明

@property (nonatomic, assign) id<SHCTableViewDataSource> customDataSource;

然后

-(void)setDataSource:(id<SHCTableViewDataSource>)dataSource {
[super setDataSource:_dataSourceInterceptor]
  _customDataSource = dataSource;

 [self refreshView];

}

如果你必须这样做那么你可以这样做..

创建中间对象作为dataSourceInterceptor,以设置超类的原始dataSource并实现dataSource函数。不要将self设置为dataSource,这不是一个好主意。