У меня есть UICollectionView, который я создал программно. Я хотел бы, чтобы представление коллекции вело себя следующим образом:
1. User touches cell
2. Cell background color changes
3. User releases touch
4. Cell background color changes
Это должно быть быстрое изменение цвета, которое происходит непосредственно перед выполнением селектора, связанного с действием касания, в котором контроллер представления, содержащий представление коллекции, выталкивается из стека.
Я рассматривал этот вопрос: ячейка UICollectionView меняет фон при нажатии
в котором есть следующее резюме методов, используемых для этой цели:
// Methods for notification of selection/deselection and highlight/unhighlight events.
// The sequence of calls leading to selection from a user touch is:
//
// (when the touch begins)
// 1. -collectionView:shouldHighlightItemAtIndexPath:
// 2. -collectionView:didHighlightItemAtIndexPath:
//
// (when the touch lifts)
// 3. -collectionView:shouldSelectItemAtIndexPath: or - collectionView:shouldDeselectItemAtIndexPath:
// 4. -collectionView:didSelectItemAtIndexPath: or -collectionView:didDeselectItemAtIndexPath:
// 5. -collectionView:didUnhighlightItemAtIndexPath:
Я предполагаю, что мне нужно только реализовать один из вышеперечисленных методов из «когда прикосновение начинается» и «когда прикосновение заканчивается». Но что бы я ни делал, получается, что цвет фона меняется, а затем остается измененным. Вот пример того, что я пытался сделать, но это не сработало:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
//pop vc
}
- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor redColor];
}
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor greenColor];
}
Это приводит к изменению цвета фона ячейки только на красный. Я также рассмотрел этот вопрос: проблема с выбором и отменой выбора UICollectionView и попытался реализовать [UICollectionView selectItemAtIndexPath :animated:scrollPosition:] и вызывая его внутри didSelectItemAtIndexPath, но это тоже не сработало. Источник данных представления коллекции и делегат установлены.