当我拖动项目之间的空白区域时,为什么我的UICollectionView滚动?

时间:2013-01-06 22:14:10

标签: cocoa-touch scroll uicollectionview

我正在使用UICollectionView创建网格布局,但只有按下图像时,滚动似乎才有效。如果我按下空白区域,视图不会滚动。如何为背景和图像上的印刷机启用滚动?

例如,在下面的屏幕截图中,滚动仅在按下白色方块时才有效,但如果按下方块之间的黑色则不能滚动。

我认为我没有任何滚动特定代码,但如果您希望我添加特定代码示例,请告诉我。

2 个答案:

答案 0 :(得分:1)

如果您设置backgroundColor的{​​{1}}或backgroundView,则会在视图中的任何位置(包括示例中的白色方块之间)触摸时滚动。

答案 1 :(得分:0)

最后我解决了这个问题。这是我做的:

我注意到问题是我的UICollectionViewCell有userInteractionEnabled = YES。我试图将此值更改为NO,并且滚动开始工作。 UICollectionViewCells正在拦截触摸,而Collection视图滚动不起作用。

但我有一个附带问题:一旦我触摸了一个单元格,就没有调用didSelectItemAtIndexPath方法。

我的解决方案是添加一个UITapGestureRecognizer来检测是否已触摸某个单元格并手动调用此方法。

将此添加到viewDidLoad方法:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[self.collectionView addGestureRecognizer:singleTap];

这是singleTapGestureCaptured方法:

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
    CGPoint touchPoint=[gesture locationInView:self.collectionView];
    NSIndexPath* indexPath = [self.collectionView indexPathForItemAtPoint:touchPoint];
    [self collectionView:self.collectionView didSelectItemAtIndexPath:indexPath];
}

希望这对你有帮助!