我有一个以编程方式创建的 UICollectionView。我希望集合视图的行为方式如下:
1. User touches cell
2. Cell background color changes
3. User releases touch
4. Cell background color changes
这应该是在执行与点击操作相关的选择器之前发生的快速颜色更改,其中包含集合视图的视图控制器从堆栈中弹出。
我一直在看这个问题:UICollectionView cell change background while tap
其中有以下用于此目的的方法摘要:
// 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 Select and Deselect issue并尝试实现 [UICollectionView selectItemAtIndexPath:animated:scrollPosition:] 并在 didSelectItemAtIndexPath 内部调用它,但这也不起作用。集合视图数据源和委托已设置。