UITableViewCell使用来自其他单元格的值

时间:2010-04-26 02:18:47

标签: iphone uitableview

我使用dequeueReusableCellWithIdentifier方法时遇到问题。每当我使用这个时,一个单元格将显示自己的值和不属于它的值。此first second图片显示问题,而third图片显示正确的数据。问题似乎是由旧值未被删除而新值添加到顶部如果它。这似乎很奇怪。

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell =nil ; 
if(indexPath.row==0){
    cell = [[[UITableViewCell alloc]init]autorelease];
}else {
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
}

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];


}

NSMutableArray *rowArray = [results objectAtIndex:indexPath.section];
NSString *value=nil;

if (indexPath.section==0) {
    // the row in the 0th section is patient's sticky
    value = [rowArray objectAtIndex:indexPath.row];
    cell.textLabel.text = value;
}else {
    //the row in the 1th section are lab tests
    //here rowArray is tableRecords
    NSArray *rowrecordTemp = [rowArray objectAtIndex:indexPath.row];
    UILabel *label= [[UILabel alloc]initWithFrame:CGRectMake(5, 0, 130, tableView.rowHeight-5) ];       
    value = [rowrecordTemp objectAtIndex:0];

    label.text= value;
    [cell.contentView addSubview:label];
    [label release];
    label = nil;


    label =  [[UILabel  alloc] initWithFrame:CGRectMake(140, 0, 50.0, 
                                                        tableView.rowHeight-10)]; 
    value = [rowrecordTemp objectAtIndex:1];
    label.text = value;
    [cell.contentView addSubview:label];
    [label release];
    label = nil;


    label = [[UILabel alloc] initWithFrame:CGRectMake(190, 0, 90, tableView.rowHeight-10)];
    value =  [rowrecordTemp objectAtIndex:2];
    label.text = value;
    [cell.contentView addSubview:label];
    [label release];
    label = nil;


    NSLog(@"%@\t\t%@\t\t\t\t\n%@",[rowrecordTemp objectAtIndex:0] ,[rowrecordTemp objectAtIndex:1],[rowrecordTemp objectAtIndex:2]);


}
NSString *fontname = cell.textLabel.font.fontName;
cell.textLabel.font = [UIFont fontWithName:fontname size:16];
cell.textLabel.numberOfLines = 0;
return cell;

}

2 个答案:

答案 0 :(得分:2)

表格视图单元格在内存中共享。当你使一个新的出列时,它将具有旧的值(我认为最后一个要出列)。您必须清除其旧内容才能显示其新内容。

如果你正在按照cell.textLabel.text = [arr objectAtIndex:indexPath.row]的方式做某事,那就没有问题,因为文本只会被替换。如果您有自定义视图或更复杂的内容,则必须完全替换视图。

答案 1 :(得分:0)

(section != 0)你正在向UITableViewCell添加新的UILabel时。每次单元格出列时,都会向其添加新标签。您应该删除旧标签,或更改旧标签的文本,而不是创建新标签。