UITableViewCell没有正确重用?

时间:2014-10-27 09:02:27

标签: ios objective-c uitableview

我尝试重用UITableViewCell如下:
1)通过UITableViewCell使用xib-file创建子类。

@interface BaseCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *labelTitle;
@end

2)在IB中添加重用标识符 enter image description here

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来测试它。

1 个答案:

答案 0 :(得分:0)

细胞重用的好处只有在细胞滚动时离开屏幕时才会变得明显(或者由于某些其他原因而变为&#34;未使用&#34;例如reloadCells调用)。消失的单元格被放入队列中。当tableView接下来需要一个单元格时,它会使用队列中的单元格,而不是从NIB构建一个单元格。