UITableViewCell использует значение от других ячеек

У меня есть проблема с использованием dequeueReusableCellWithIdentifier метод. Каждый раз, когда я использую этого, одна ячейка отобразила бы свое собственное значение и значение, которое не принадлежит ей. Этот первые и вторые изображения показывают проблему, в то время как третье изображение показывает надлежащие данные. Проблема, кажется, вызывается старым значением, не вытираемым и новым значением, добавляемым на вершине если это. Который кажется очень странным.

// 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;

}

1
задан Michael Z 9 October 2010 в 23:18
поделиться

2 ответа

Когда (section! = 0) вы добавляете новые UILabels в UITableViewCell. Каждый раз, когда ячейка удаляется из очереди, к ней добавляются новые метки. Вам следует либо удалить старые метки, либо изменить текст старой метки вместо создания новой.

0
ответ дан 3 September 2019 в 01:01
поделиться

Ячейки табличного представления совместно используются в памяти. Когда вы удаляете из очереди новый, он будет иметь значение старого (я думаю, что последний будет удален из очереди). Вы должны очистить его от старого содержимого, чтобы отобразить новое содержимое.

Если вы делаете что-то вроде cell.textLabel.text = [arr objectAtIndex: indexPath.row] , проблем нет, потому что текст будет просто заменен. Если у вас есть настраиваемое представление или что-то более сложное, вам необходимо полностью заменить представление.

2
ответ дан 3 September 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: