Снятие с повторного использования ячеек из UITableView - PullRequest
2 голосов
/ 08 ноября 2010

Почему этот код работает нормально:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.text = [NSString stringWithFormat:@"cell%i%i", indexPath.section, indexPath.row];
    }    
    return cell;
}

Насколько я понял идентификаторы ячеек, этот код должен работать правильно, только если я переместил строку cell.textLabel.text = ... из оператора if. Другими словами, почему ярлыки имеют правильный текст ???

Ответы [ 2 ]

6 голосов
/ 08 ноября 2010

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

Это будет нормально для 5 или около того строк, которые вы видите на экране, но как только вы начнете прокручивать, вы увидите некоторые "интересные" вещи:)

0 голосов
/ 08 ноября 2010

Созданная ячейка используется повторно.Это означает, что объект помечен для повторного использования (и, таким образом, экономит вам полное создание объекта).

Таким образом, как только он прокручивается за пределы экрана, ячейка помечается как повторно используемая.Из-за этого вы сначала проверяете, есть ли повторно используемые ячейки ([tableView dequeueReusableCellWithIdentifier :), прежде чем создавать новую.

Текст, который нужно установить, поскольку он (вероятно) различен для каждой ячейкиваш стол, но не имеет ничего общего с созданием / уничтожением объекта.

...