【发布时间】:2014-10-27 09:02:26
【问题描述】:
我尝试按如下方式重用 UITableViewCell:
1) 通过 UITableViewCell 使用 xib 文件创建子类。
@interface BaseCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *labelTitle;
@end
2) 在 IB 中添加重用标识符
3) 添加带有 UITableView 的 UIViewController。
@interface BaseTableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
4) 在 viewDidLoad 寄存器单元笔尖
[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 来测试它。
【问题讨论】:
标签: ios objective-c uitableview