在返回单元格之前,dequeueReusableCellWithIdentifier应该清除detailTextLabel吗?

时间:2014-07-02 13:33:16

标签: ios uitableview

我有以下代码:

- (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功能的一部分还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

是。 dequeueReusableCellWithIdentifier的功能不是错误。此函数使用具有特定标识符的现有隐藏单元。多亏了你只创建了几个(通常多达10个)UITableViewCell个实例(在某些情况下可以消耗内存)。

Apple文档:

  

reuseIdentifier

     

重用标识符与UITableViewCell对象相关联,表视图的委托创建,意图将其重用为   表的多行的基础(出于性能原因)   图即可。它被分配给单元格对象   initWithFrame:reuseIdentifier:此后无法更改。一个   UITableView对象维护当前的队列(或列表)   可重用的单元,每个单元都有自己的重用标识符,并制作它们   可用于dequeueReusableCellWithIdentifier中的委托:   方法