Одна из возможных причин состоит в том, что cellForItem
внутри didSelect
вернет nil, если ячейка не видна в UICollectionView
. Например: если ячейка, которую необходимо отменить, находится за пределами экрана, то метод не будет работать, поскольку в этот момент ячейка не находится внутри UICollectionView
.
Чтобы убедиться, что он не будет выделен, вам также нужно будет отключить выделение ячейки внутри cellForRow
.
Другой момент, который мне кажется странным, заключается в том, почему вы создаете new UILabel
при каждом изменении состояния? Вам просто нужно изменить свойства одного UILabel
в зависимости от состояния.
Я бы посоветовал оставить все состояния ячеек отключенными в prepareForReuse
и cellForRow
, выберите их. Помимо этого в didSelect
, конечно.