我有以下代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell=[self._tableView dequeueReusableCellWithIdentifier:@"event"];;
Event* event =[self eventForIndexPath:indexPath];
if(cell==nil)
cell=[[EventCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"event"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(0.0f, 0.0f, 44.0f, cell.frame.size.height)];
[button setImage:[UIImage imageNamed:@"van_green.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"location.png"]forState:UIControlStateSelected];
[button addTarget:self action:@selector(carButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
button.layer.borderWidth = 0.0;
[[cell textLabel] setText:event.customer.name];
if(event.startTime!=nil)
[[cell detailTextLabel] setText:event.startTime];
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
if(event.drivingTime!=0 && event.drivingDistance !=0)
button.selected=YES;
[ cell.contentView addSubview:button];
return cell;
}
当重用一个单元格时,我得到一个带有前一个detailTextLabel的单元格。这意味着如果我不更改detailTextLabel字符串,则会显示它之前的文本。这是dequeueReusableCellWithIdentifier功能的一部分还是我做错了什么?
答案 0 :(得分:0)
是。 dequeueReusableCellWithIdentifier
的功能不是错误。此函数使用具有特定标识符的现有隐藏单元。多亏了你只创建了几个(通常多达10个)UITableViewCell
个实例(在某些情况下可以消耗内存)。
Apple文档:
reuseIdentifier
重用标识符与UITableViewCell对象相关联,表视图的委托创建,意图将其重用为 表的多行的基础(出于性能原因) 图即可。它被分配给单元格对象 initWithFrame:reuseIdentifier:此后无法更改。一个 UITableView对象维护当前的队列(或列表) 可重用的单元,每个单元都有自己的重用标识符,并制作它们 可用于dequeueReusableCellWithIdentifier中的委托: 方法