Повторите проблему ячейки просмотра таблицы во время прокрутки в iPhone - PullRequest
2 голосов
/ 08 января 2010

Есть 5 ячеек, и каждая ячейка имеет одну динамическую метку. высота ячейки определяется в соответствии с содержимым метки с помощью метода heightForRowAtIndexPath. Теперь отображаются 3 ячейки. Когда я прокручиваю следующие ячейки, то cellForRowAtIndexPath вызывается один раз, и на выходе любая одна (4 или 5) ячейка отображается правильно, а другая имеет 1-е содержимое ячейки (повторяется). Есть ли решение, чтобы это исправить? Метод cellForRowAtIndexPath должен вызываться 2 раза. Я правильно определил разделы и строки.

Ответы [ 7 ]

3 голосов
/ 07 июля 2010

Снять судебное решение

if (cell == nil)

Это хорошо. Теперь я решаю свою проблему. Большое спасибо.

1 голос
/ 08 января 2010

Возможно, вы неправильно используете ячейки. При прокрутке предыдущая ячейка повторно используется UITableView, но ее содержимое не изменяется правильно.

Код в cellForRowAtIndexPath должен выглядеть примерно так:

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

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

    cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = [self.dateFormatter stringFromDate:[NSDate date]];

    return cell;
}

Как ты выглядишь?

0 голосов
/ 16 февраля 2015

Попробуйте дать уникальный идентификатор для каждой ячейки,

NSString * CellIdentifier = [NSString stringWithFormat: "Ячейка% d", indexpath.row];

Не знаю, правильный ли это путь, но это должно решить твою проблему.

0 голосов
/ 26 июня 2013
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"cell %d",indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

        cell.textLabel.text = @"Hello";

    }
    // Configure the cell.
    return cell;
}
0 голосов
/ 26 июня 2013

Никогда не удаляйте if(cell == nil).

Вместо этого очистите подпредставления, добавленные в ячейку.

  if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault    reuseIdentifier:CellIdentifier] ;
       }else{
       NSArray *cellSubviews= [cell.contentView cellSubviews];
        for (UIView * view in subviews) {
            [view removeFromSuperview];
        }
    }
0 голосов
/ 09 января 2010

Проблема в том, что ячейка не равна нулю, поэтому она возвращает одну и ту же ячейку несколько раз при прокрутке. Я удалил условие из метода cellForRowAtIndexPath.

if (cell == nil)

Теперь каждый раз выделяет ячейку и работает нормально.

0 голосов
/ 09 января 2010

Поскольку у вас нет фиксированного размера для каждой строки, вы не сможете использовать их повторно, за исключением повторного представления того же контента или какого-либо подобного контента.

Я предлагаю создать идентификатор для каждой строки с разным размером.

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

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