首先,在这里反省一下自己,在遇到问题的时候没有及时去解决,这一点很不好,得改
一、关于UITableView 复用cell两种方法:
- 非注册
-(id)dequeueReusableCellWithIdentifier:(NSString *)identifier;
如果没有复用cell,程序可能会返回nil, 所以创建完cell后必须要做判空处理,未获取到则重新创建。这种方法可以不用注册。
//尝试获得可以复用的单元格。但不一定获得到。得不到返回nil
UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:@"ft"];
//如果没有获得到
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ft"];
}
- 注册
(id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
获取复用的cell,如果没有复用的cell,将自动使用提供的class类创建新的cell并返回,后面不需要再进行判空。在此之前必须要注册cell。
[self.tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"ft"];
MyTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"ft" forIndexPath:indexPath];
- 区别:
注册的方法需要提前将要复用的 Cell 类注册,而不需要在获取 Cell 时手动判断 cell的获取 是否为nil,这是因为 dequeueReusableCellWithIdentifier:identifier forIndexPath:在内部处理了这个过程,使得最后返回的一定是可用的 Cell
具体看这篇
二、步骤
建立MyTableViewCell文件继承于UITableViewCell
// MyTableViewCell.h文件
@interface MyTableViewCell : UITableViewCell
@property UILabel *label;
@property UIButton *btn