OC--UITableviewCell的优雅new
2017-03-07 本文已影响233人
啊哈呵
以前的代码是这样子的
1、2、3步骤
static NSString *const kXXOOXXXCellIdentifier = @"PSCustomDataPickerTableViewCell";
[self.tableView registerNib:[UINib nibWithNibName:kPSInputInfoTableViewCellIdentifier bundle:nil] forCellReuseIdentifier:kPSInputInfoTableViewCellIdentifier];
[self.tableView registerClass:[PSCustomDataPickerTableViewCell class] forCellReuseIdentifier:kPSCustomDataPickerTableViewCellIdentifier];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kPSInputInfoTableViewCellIdentifier;
return cell;
}
这里写registerClass,
那里写Identifier定义,
使用时写dequeueReusableCellWithIdentifier。
写来写去这是有多无聊啊,相当于与三个地方在做一件事,我忍了很久了,为什么不能一句代码解决呢?
我想要的样子就一句话:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
PSContactsTableViewCell *cell = [PSContactsTableViewCell cellForNibTableView:tableView];
return cell;
}
源码:UITableViewCell的Categoary
#import <UIKit/UIKit.h>
@interface UITableViewCell (PSInitializeCell)
/**
获取Cell--Alloc
*/
+ (instancetype)cellForAllocTableView:(UITableView *)tableView;
/**
获取Cell--Nib
*/
+ (instancetype)cellForNibTableView:(UITableView *)tableView;
@end
#import "UITableViewCell+PSInitializeCell.h"
@implementation UITableViewCell (PSInitializeCell)
+ (instancetype)cellForAllocTableView:(UITableView *)tableView{
NSString *cellIdentifier=NSStringFromClass(self);
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {//不存在,注册再获取
[tableView registerClass:[self class] forCellReuseIdentifier:cellIdentifier];
cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
}
return cell;
}
+ (instancetype)cellForNibTableView:(UITableView *)tableView{
NSString *cellIdentifier=NSStringFromClass(self);
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {//不存在,注册再获取
//nib的一般都是对应的类名。如果有些情况不对应,那就不适合这个方法。
[tableView registerNib:[UINib nibWithNibName:cellIdentifier bundle:nil] forCellReuseIdentifier:cellIdentifier];
cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
}
return cell;
}
@end
外:
1.内次都NSString *cellIdentifier=NSStringFromClass(self);可能消耗性能,以后再慢慢研究它(一个类只能一次,又不定义变量),现在先这样
2.首先注册registerNib cell,然后使用:
1.dequeueReusableCellWithIdentifier:
2.dequeueReusableCellWithIdentifier:forIndexPath:
一直不知道这两者有什么区别?