2017-02-06 6 views
0

Есть ли противоположный метод для dequeueReusableCell? Я удаляю ячейки для вычисления высоты ячейки и после вычисления ее высоты я хочу переработать эту ячейку, чтобы ее можно было повторно использовать для отображения.Вручную утилизировать UITableViewCell

Или мне нужно просто создать экземпляр объекта на тип ячейки, сохранить его в свойстве и использовать его вместо этого?

+0

Никакой другой метод, который вы должны удалить из ячейки. –

+0

Чтобы вы правы: вы удаляете ячейку из UITableView, чтобы настроить ее, а затем вычислить ее высоту, а затем вы выбросите ее? Или вы называете 'cellForRow' (который внутренне вызывает' dequeue ... '), вычисляет высоту и затем бросает ее? И вместо того, чтобы выбросить его, вы хотите, чтобы таблица повторно использовала его (так что в следующий раз, когда вы вызовете 'dequeueReusableCell', вы вернете один из них? –

+0

@AndreasOetjen Я вызываю' dequeueReusableCell (withIdentifier: "xyz") ', а затем Я хотел бы переработать его, а не просто выбросить. – shelll

ответ

0

Это все еще невозможно в iOS 10. Я обновлю ответ, если это будет доступно в будущем.

0

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

Внутри метода cellForRow... вначале вы должны использовать метод dequeue-метода таблицы, и если это вернет nil, вы будете использовать свою собственную очередь для извлечения многоразовых ячеек. Только если ни одно из них ничего не возвращает, вы создадите новые ячейки.

Но помните, что метод dequeue-метода таблицы возвращает только те ячейки, которые вы уже создали ранее, в cellForRow!

+0

Волшебно он никогда не возвращает нуль в моем случае на iOS 10, так что, возможно, что-то изменилось с годами.Я закончу словарь с cellId -> cell и создаст экземпляр одной ячейки для каждого идентификатора в конструкторе. Добавление собственного потока в переработку ячеек - путь к аду ... – shelll

+0

Зависит от того, dequeue'-метод, который вы вызываете, это будет съел одно для вас. Тем не менее, вы обычно не будете реализовывать свое приложение таким образом, чтобы создавать ячейки для вычисления высоты, потому что это не очень эффективно, особенно для больших таблиц. –

+0

Метод 'dequeue' без' indexPath' не должен создавать ячейки, он никогда не создавал одну из старых версий iOS. Теперь оба метода 'dequeue' возвращают значения non-nil в моем случае на iOS 10. Динамические ячейки высоты - огромная боль для iOS в целом. Автоматическое вычисление высоты - это дерьмо и медленное, расчетная высота - еще больше дерьма (не надежна, когда вам нужно точное значение прокрутки и в некоторых случаях вызывает прыжки). Единственными надежными способами является вычисление высоты с помощью реальных ячеек, а затем кеширование значений. И вы не можете вставить более 10-20 ячеек с динамической высотой сразу ... – shelll