我尝试重用UITableViewCell如下:
1)通过UITableViewCell使用xib-file创建子类。
@interface BaseCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *labelTitle;
@end
2)在IB中添加重用标识符
3)在UIViewController中加入UITableView。
@interface BaseTableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
4)在viewDidLoad中注册单元格nib
[self.tableView registerNib:[UINib nibWithNibName:@"BaseCell" bundle:nil] forCellReuseIdentifier:@"BaseCell"];
5)并使用dequeueReusableCellWithIdentifier
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
BaseCell* cell = [tableView dequeueReusableCellWithIdentifier:@"BaseCell"];
NSAssert(cell, @"cell registered but not created");
DLog(@"cell:[%p]", cell);
cell.labelTitle.text = self.showItems[indexPath.row];
return cell;
}
之后我看到单元格每次都是第一次创建
我的日志例如:
[0x7f87c9c84740:1] -[BaseCell initWithCoder:] BaseCell
[0x7f87c9c84740:1] -[BaseCell awakeFromNib] reuseIdentifier:BaseCell;
[0x7f87c9d3d230:1] -[BaseTableViewController tableView:cellForRowAtIndexPath:] cell:[0x7f87c9c84740]
[0x7f87c9e29560:1] -[BaseCell initWithCoder:] BaseCell
[0x7f87c9e29560:1] -[BaseCell awakeFromNib] reuseIdentifier:BaseCell;
[0x7f87c9d3d230:1] -[BaseTableViewController tableView:cellForRowAtIndexPath:] cell:[0x7f87c9e29560]
[0x7f87c9e2d150:1] -[BaseCell initWithCoder:] BaseCell
我做错了什么? 如何正确重复使用细胞。
我使用最新的Xcode(6.0.1)
我创建了示例project来测试它。
答案 0 :(得分:0)
细胞重用的好处只有在细胞滚动时离开屏幕时才会变得明显(或者由于某些其他原因而变为&#34;未使用&#34;例如reloadCells调用)。消失的单元格被放入队列中。当tableView接下来需要一个单元格时,它会使用队列中的单元格,而不是从NIB构建一个单元格。