自定义UITableViewCell时registerNib: 与 registerClass: 的区别
2016-05-13 14:10
471 查看
自定义UITableViewCell大致有两类方法
使用Nib
1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)2、调用
tableView的
registerNib:forCellReuseIdentifier:方法向数据源注册cell
[_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellReuseIdentifier:kCellIdentify];
3、在
cellForRowAtIndexPath中使用
dequeueReuseableCellWithIdentifier:forIndexPath:获取重用的cell,若无重用的cell,将自动使用所提供的nib文件创建cell并返回(若使用旧式
dequeueReuseableCellWithIdentifier:方法需要判断返回是否为空而进行新建)
4、获取cell时若无可重用cell,将创建新的cell并调用其中的awakeFromNib方法,可通过重写这个方法添加更多页面内容
不使用Nib
1、重写自定义cell的initWithStyle:withReuseableCellIdentifier:方法进行布局- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self){ // cell页面布局 [self setupViews]; [self updateConstraintsIfNeeded]; } return self; }
2、为tableView注册cell,使用
registerClass:forCellReuseIdentifier:方法注册(注意是Class)
[_tableView registerClass:[xxxxxCell class] forCellReuseIdentifier:kCellIdentify];
3、在cellForRowAtIndexPath中使用
dequeueReuseableCellWithIdentifier:forIndexPath:获取重用的cell,若无重用的cell,将自动使用所提供的class类创建cell并返回
xxxxxCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];
4、获取cell时若无可重用cell,将调用cell中的initWithStyle:withReuseableCellIdentifier:方法创建新的cell
需要注意的问题
1、dequeueReuseableCellWithIdentifier:与
dequeueReuseableCellWithIdentifier:forIndexPath:的区别:
前者不必向tableView注册cell的Identifier,但需要判断获取的cell是否为nil;
后者则必须向table注册cell,可省略判断获取的cell是否为空,因为无可复用cell时runtime将使用注册时提供的资源去新建一个cell并返回
2、自定义cell时,记得将其他内容加到
self.contentView上,而不是直接添加到 cell本身上
总结
1.自定义cell时,若使用nib,使用 registerNib: 注册,dequeue时会调用 cell 的 -(void)awakeFromNib;不使用nib,使用 registerClass: 注册, dequeue时会调用 cell 的 - (id)initWithStyle:withReuseableCellIdentifier:2.需不需要注册?
使用dequeueReuseableCellWithIdentifier:可不注册,但是必须对获取回来的cell进行判断是否为空,若空则手动创建新的cell;
使用dequeueReuseableCellWithIdentifier:forIndexPath:必须注册,但返回的cell可省略空值判断的步骤。
相关文章推荐
- OpenStack nova M Blueprints 分析
- UVa540 Team Queue (queue)
- darwin streaming server 媒体服务器发送本地自己的文件,使用quicktime pro标记-流
- request.sendRedirect(重定向)和request.getRequestDispatcher(请求转发)
- (转)EasyUI-datagrid-自动合并单元格
- longest consecutive sequence
- express 413 Request Entity Too Large解决办法
- leetcode 304. Range Sum Query 2D - Immutable
- IOS:FMDB使用databaseQueue实现数据库操作线程安全
- vim E437: terminal capability "cm" required
- Logging only once for UICollectionViewFlowLayout cache mismatched frame
- NSURLRequest各种缓存方式讲解
- iOS之UIScrollView实现无限滚动,思路与代码
- Qt中Ui名字空间以及setupUi函数的原理和实现
- android常用UI控件总结
- MySQL提示:The server quit without updating PID file问题的解决办法
- Java并发编程之2——同步工具类的使用(CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore)
- Android工作杂项总结(APN,3G,i2c,SystemUI等)
- LeetCode---Implement Queue Using Stacks、Implement Stack Using Queues解题分析
- UITableView-01初见