Решение Гендолкари дало мне идею временно удалить ячейку из цикла удаления.Он включает в себя установку значения только для чтения с помощью KVC, поэтому он не предназначен для действительно хакерских помех.
Если вы сначала хотите удалить ячейку из цикла, измените reuseIdentifier для этой конкретной ячейки.Мы хотим найти ячейку позже, поэтому переименуйте ее в то, что мы можем индексировать.Я нашел [NSIndexPath description], чтобы быть полезным здесь.ReuseIdentifier является свойством только для чтения, но это Objective-C, и у нас есть KVC:
[cell setValue:[[self.tableView indexPathForCell:cell] description] forKey:@"reuseIdentifier"];
Теперь, когда мы повторно используем ячейку в cellForRowAtIndexPath:
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
, мыЯ не вернусь к этой конкретной ячейке, потому что мы изменили reuseIdentifier.
Однако, если мы прокручиваем вниз, затем прокручиваем назад вверх, мы, вероятно, хотим отобразить исходную ячейку, которую мы удалили из цикла удаления.Чтобы сделать это, когда мы повторно используем ячейку, сначала попытайтесь удалить из нее ячейку на основе indexPath, и если мы не сможем обнаружить эту попытку, просто на основе базовой строки идентификатора ячейки:
UITableViewCell *cell;
cell = [self.tableView dequeueReusableCellWithIdentifier:[indexPath description]];
if (!cell) cell = [self.tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
Если вы хотите вернуть эту ячейку обратно в цикл удаления, просто измените reuseIdentifier обратно на исходное значение:
[cell setValue:@"cellIdentifier" forKey:@"reuseIdentifier"];