From 9ae4b19014acbee4256e915f713f8de81b353f47 Mon Sep 17 00:00:00 2001 From: Leszek Kaczor Date: Thu, 7 May 2015 12:11:03 +0200 Subject: [PATCH] Add delegate method to get reuse identifier for item --- TGRDataSource/TGRDataSource.h | 21 +++++++++++++++++++++ TGRDataSource/TGRDataSource.m | 14 ++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/TGRDataSource/TGRDataSource.h b/TGRDataSource/TGRDataSource.h index c1ba386..38eeec9 100644 --- a/TGRDataSource/TGRDataSource.h +++ b/TGRDataSource/TGRDataSource.h @@ -24,12 +24,33 @@ typedef void (^TGRDataSourceCellBlock)(id cell, id item); +@class TGRDataSource; +@protocol TGRDataSourceDelegate + +@optional +/** + * Gets reuse identifier for cell when cellReuseIdentifier property is nil. + * + * @param dataSource The current data source + * @param item The data source item + * + * @return The reuse identifier for data source item + */ +- (NSString *)dataSource:(TGRDataSource *)dataSource reuseIdentifierForItem:(id)item; + +@end + /** Convenience class to encapsulate an `UITableView` or `UICollectionView` data source. Inspired by http://www.objc.io/issue-1/lighter-view-controllers.html */ @interface TGRDataSource : NSObject +/** + * The data source delegate + */ +@property (weak, nonatomic) iddelegate; + /** The cell reuse identifier. */ diff --git a/TGRDataSource/TGRDataSource.m b/TGRDataSource/TGRDataSource.m index 4b3d90c..1939483 100644 --- a/TGRDataSource/TGRDataSource.m +++ b/TGRDataSource/TGRDataSource.m @@ -63,9 +63,12 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:self.cellReuseIdentifier - forIndexPath:indexPath]; id item = [self itemAtIndexPath:indexPath]; + NSString * reuseIdentifier = self.cellReuseIdentifier; + if (!reuseIdentifier) + reuseIdentifier = [self.delegate dataSource:self reuseIdentifierForItem:item]; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier + forIndexPath:indexPath]; if (self.configureCellBlock) { self.configureCellBlock(cell, item); @@ -86,9 +89,12 @@ - (NSInteger)collectionView:(UICollectionView *)collectionView - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:self.cellReuseIdentifier - forIndexPath:indexPath]; id item = [self itemAtIndexPath:indexPath]; + NSString * reuseIdentifier = self.cellReuseIdentifier; + if (!reuseIdentifier) + reuseIdentifier = [self.delegate dataSource:self reuseIdentifierForItem:item]; + UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier + forIndexPath:indexPath]; if (self.configureCellBlock) { self.configureCellBlock(cell, item);