在某些时候,您需要将不同的单元格类与数据源中的不同项目类型相关联。if
声明可能是要走的路。您可以将其封装在一个单独的方法中,如下所示:
+(Class)cellClassForItem:(id)rowItem
{
Class theClass = [ UITableViewCell class ] ;
if ( [ rowItem isKindOfClass:[ ... class ] ] )
{
theClass = [ CellClass1 class ] ;
}
else if ( [ rowItem isKindOfClass:[ ... class ] ] )
{
theClass = [ CellClass2 class ] ;
}
return theClass ;
}
或者,您可能让数据源中的每个项目都实现一个protocol
:
@protocol DataSourceItem <NSObject>
-(Class)tableViewCellClass ;
@end
现在,您的委托方法看起来像这样(假设第二种技术)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
id<DataSourceItem> item = (id<DataSourceItem>)[ tableView itemForRowAtIndexPath:indexPath ] ;
Class cellClass = [ item tableViewCellClass ] ;
NSString * cellID = NSStringFromClass( cellClass ) ;
UITableViewCell *cell = [ tableView dequeueReusableCellWithIdentifier:cellID ] ;
if ( !cell )
{
cell = [ [ cellClass alloc ] initWithStyle:... reuseIdentifier:cellID ] ;
}
cell.value = item ;
return cell;
}