UICollectionView PerformBatchUpdates одновременно вставляет, удаляет и перемещает

Я пытаюсь использовать метод UICollectionView performBatchUpdates для выполнения операции фильтрации (вроде), и внутри блока я вставляю ячейки, перемещаю ячейки и удаляю ячейки. Я получаю некоторые странные результаты, поэтому мне интересно, действительно ли такое поведение поддерживается (я полагаю, что все индикаторы перепутались). Нужно ли мне просто разбивать каждый «тип» действия (вставка, перемещение и удаление) на отдельные отдельные блоки?


person chinabuffet    schedule 06.12.2012    source источник


Ответы (2)


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

person monowerker    schedule 06.12.2012
comment
На самом деле это оказалось ошибкой в ​​другом месте моего кода. Я был обеспокоен тем, что индикаторы искажаются из-за составных действий, когда внутри вызова performBatchUpdates я удаляю по индексу 0, а затем вставляю по индексу 0 и т. д. Кажется, теперь это работает правильно. Спасибо, просто хотел подтвердить, что могу выполнять пакетные операции разных типов. - person chinabuffet; 07.12.2012
comment
На самом деле используемые индексы зависят от операции - из документации - удаления обрабатываются перед вставками в пакетных операциях. Это означает, что индексы для удалений обрабатываются относительно индексов состояния представления коллекции перед пакетной операцией, а индексы для вставок обрабатываются относительно индексов состояния после всех удалений в пакетной операции. - person safety; 13.11.2015
comment
Просто хотел прыгнуть сюда и согласиться с тем, что принятый ответ здесь неверен! @safety правильно говорит, что вы должны обновлять индексы вставки при удалении в том же блоке. - person Brent Traut; 26.07.2016
comment
Действительно, это неправильный ответ. Проверьте документы: вставки основаны на индексах после удаления developer.apple.com/documentation /uikit/uicollectionview/ - person Carlos Ricardo; 19.09.2018

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

Я обнаружил, что мне нужно вычислить удаленные элементы с индексами строк и разделов, прежде чем удалять разделы, которые я хотел удалить из источника данных. (перед разделом удалить)

Затем удалите разделы из источника данных и сохраните эти индексы для удаления.

Затем вставьте любые новые разделы/при необходимости отсортируйте/и отслеживайте все эти вставленные разделы.

Наконец, вычислите вставленные строки на основе индексов нового раздела.

Deleted Sections: (pre deleted index)
Inserted Sections: (indexes after deleting the deleted sections and adding these back in)
Deleted Rows: (row, pre-deleted section)
Inserted rows: (row, section based on index after inserting new sections)

это было с iOS 9.

person utahwithak    schedule 08.09.2016