iOS UITableView Cell загружается неправильно после прокрутки? - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть 2 UITableView в представлении, и я добавил UITableViewCellAccessoryDisclosureIndicator только во 2-й строке таблицы 5 и 7-й строке.

Но после прокрутки 2-й таблицы вниз (эта строка 1 исчезает) и затем прокрутитек началу (какая строка 1 появляется), строка 1 теперь имеет UITableViewCellAccessoryDisclosureIndicator ?!Строка 1 так или иначе стала строкой 5 или строкой 7 ???Ниже приведен мой код для cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.textColor = [UIColor blueColor];
    cell.detailTextLabel.textColor = [UIColor blackColor];
    if (tableView == table1)
    {
        cell.textLabel.text = [title1 objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [list1 objectAtIndex:indexPath.row];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    else if (tableView == table2)
    {
        cell.textLabel.text = [title2 objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [list2 objectAtIndex:indexPath.row];
        if (indexPath.row == 5 || indexPath.row == 7)
        {
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
        else
        {
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
    }
    return cell;
}

Большое спасибо!

1 Ответ

2 голосов
/ 30 сентября 2011

UITableViewCells повторно используются для оптимизации производительности.Это происходит в [tableView dequeueReusableCellWithIdentifier:CellIdentifier];. При каждом вызове tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath . Вам нужно явно устанавливать любые свойства, которые вы хотели бы видеть в ячейке.

Что-то вроде этого должно решить проблему:

if (indexPath.row == 5 || indexPath.row == 7)
        {
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
        else
        {
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.accessoryType = UITableViewCellAccessoryNone;
        }
...