#ios #swift #uicollectionview #uicollectionviewcell
#iOS #swift #uicollectionview #uicollectionviewcell
Вопрос:
Я пытаюсь обновить одну метку в ячейке представления коллекции. Я знаю, как обновить представление всей коллекции и как обновить отдельную ячейку, но я хочу обновить только метку, потому что, если обновится вся ячейка, это изменит другие вещи, которые я пока не хочу менять. В документах я нашел что-то под названием UICollectionViewUpdateItem, но не могу понять, как это использовать. Возможно ли это обновить одну метку или, если нет, есть ли другой способ?
Ответ №1:
Если вы знаете путь к индексу ячейки, которую хотите обновить, вы можете получить ячейку с помощью cellForItem(at: IndexPath)
. Оттуда вы можете редактировать метку своей ячейки.
Однако я предлагаю вам не изменять свои базовые данные, чтобы они находились в состоянии, непригодном для представления в пользовательском интерфейсе. Представление коллекции может принимать решение о создании ячеек в непредсказуемые для вас моменты времени.
UICollectionViewUpdateItem
используется для указания, например, откуда переместилась ячейка и куда она переместилась, или что ячейка в определенной позиции была удалена, обновлена и т.д. В документах указано:
Вы не создаете экземпляры этого класса напрямую.
Таким образом, это означает, что вы должны создавать его только косвенно, например, через reloadItems(at: [IndexPath])
. Это перезагрузит всю вашу ячейку и не должно использоваться для обновления отдельной ее детали.
Комментарии:
1. Это хорошая информация, но как мне обновить метку, не обновляя всю ячейку? Например, если в ячейке происходит анимация, и я хочу обновить метку, я не хочу отменять анимацию.
2. Я бы вычислил путь к ее индексу, получил ячейку, получил доступ к ее метке (через свойство, если у вас есть пользовательский класс cell, или используя
viewWithTag
) и присвоил ейtext
.3. Да, это то, что я пытаюсь сделать, вот что я не понимаю, как это сделать. Хорошо, прежде чем отправлять этот комментарий, я думаю, я понял, что вы имеете в виду. Это ответ, который я искал. Я не знал, что вы можете получить доступ к label.text из cellforitem() Я думал, что это не обновит его, если вы не перезагрузите ячейку или таблицу
4. Это не обновляется таким образом