UITableViewCell использует значение из других ячеек - PullRequest
1 голос
/ 26 апреля 2010

У меня проблема с использованием метода 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;

}

Ответы [ 2 ]

2 голосов
/ 26 апреля 2010

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

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

0 голосов
/ 27 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...