最初版(見名知意)
#define IdentifierForReusableHeaderCode + (NSString *)identifierForReusable;\
- (NSString *)identifierForReusable;
@interface UITableViewCell (IdentifierForReusable)
IdentifierForReusableHeaderCode
@end
@interface UICollectionReusableView (IdentifierForReusable)
IdentifierForReusableHeaderCode
@end
@interface UITableViewHeaderFooterView (IdentifierForReusable)
IdentifierForReusableHeaderCode
@end
複製程式碼
可以直接通過 Cell 的例項或者類名來直接訪問一個固定的 identifier ,省去了 巨集定義 cell 的 identifier 過程
隨後
我想,既然省掉了宣告或者巨集定義 identifier 的過程,不如順便把註冊和獲取的過程也簡化下,於是便有了下面的東西
@interface UITableView (IdentifierForReusable)
/**
使用類名註冊 Cell
*/
- (void)registerCellClass:(Class)cellClass;
/**
使用類名註冊 Header Footer
*/
- (void)registerHeaderFooterClass:(Class)aClass;
- (__kindof UITableViewCell *)dequeueReusableCellWithClass:(Class)cellClass;
- (__kindof UITableViewCell *)dequeueReusableCellWithClass:(Class)cellClass forIndexPath:(NSIndexPath *)indexPath;
- (__kindof UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithClass:(Class)aClass;
@end
@interface UICollectionView (IdentifierForReusable)
/**
使用類名註冊 Cell
*/
- (void)registerClass:(Class)cellClass;
/**
使用類名註冊 Header Footer
*/
- (void)registerClass:(Class)aClass forSupplementaryViewOfKind:(NSString *)kind;
/**
獲取 cell
@param cellClass cell 的 class
*/
- (__kindof UICollectionViewCell *)dequeueReusableCellWithReuseClass:(Class)cellClass forIndexPath:(NSIndexPath *)indexPath;
/**
獲取 UICollectionReusableView
*/
- (__kindof UICollectionReusableView *)dequeueReusableSupplementaryViewOfKind:(NSString *)elementKind withReuseClass:(Class)aClass forIndexPath:(NSIndexPath *)indexPath;
@end
複製程式碼
舉個栗子
- cell 和 headerfooter view 的註冊
[_tableView registerCellClass:[RedTableViewCell class]];
[_tableView registerCellClass:[GreenTableViewCell class]];
[_tableView registerHeaderFooterClass:[SectionHeaderView class]];
[_tableView registerHeaderFooterClass:[SectionFooterView class]];
複製程式碼
- cell 的獲取
// 支援原生方法
RedTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:[RedTableViewCell identifierForReusable] forIndexPath:indexPath];
// 簡單方法 1
RedTableViewCell * cell = [tableView dequeueReusableCellWithClass:[RedTableViewCell class]];
// 簡單方法 2
RedTableViewCell * cell = [tableView dequeueReusableCellWithClass:[RedTableViewCell class] forIndexPath:indexPath];
複製程式碼
3.headerfooter view
// 支援原生方法
// SectionHeaderView * headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:[SectionHeaderView identifierForReusable]];
// 簡單方法
SectionHeaderView * headerView = [tableView dequeueReusableHeaderFooterViewWithClass:[SectionHeaderView class]];
複製程式碼
Github 地址 覺得有用,請點一個 Star