UITableViewCell с prepareForReuse не работает - PullRequest
0 голосов
/ 19 октября 2010

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

Когда данные, которые управляют тем, какие кнопки загружены, меняются, и я звоню reloadData, я вижу, что prepareForReuse называется:

- (void) prepareForReuse {
    NSLog(@"prep for reuse");
    [self clearButtons];
}

- (void) clearButtons {
    NSLog(@"clearButtons called");
    self.buttons;
    for (UIView* v in buttons) {
        NSLog(@"clearing a button.");
        [v removeFromSuperview];
        [v dealloc];
    }
    buttons = [[NSMutableArray alloc] init];
}

Кнопки не удаляются из суперпредставления, хотя "очистка кнопки". сообщение никогда не регистрируется.

Затем я добавил явный вызов к clearButtons в tableView:cellForRowAtIndexPath:

CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

[cell clearButtons];

И на этот раз я вижу, что «очистка кнопки». зарегистрировано и все отображается правильно.

Что дает? Почему кнопки не удаляются при вызове из prepareForReuse?

Ответы [ 2 ]

4 голосов
/ 26 июля 2013

Вы должны указать идентификатор повторного использования при создании ячейки, иначе UITableView не будет вызывать ваш метод prepareForReuse.

Для документации необходимо также вызвать [super prepareForReuse];

1 голос
/ 19 октября 2010

Возможно, это не связано, но есть несколько вещей, которые вы должны исправить в createButtons:

  1. Используйте [v release] вместо [v dealloc]
  2. Отпустите buttons также и до инициализации нового.

Я бы также спросил, если вы удалите все, кроме NSLog, это работает?

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