Можно ли использовать UICollectionViewUpdateItem для обновления одной метки?

#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. Это не обновляется таким образом