我尝试过子类化UICollectionView并覆盖touchesBegan:withEvent:
和hitTest:WithEvent:
,当我触摸一个单元格时,这两种方法都会触发。但是,如果我触摸单元格之间的空间,则根本不会发生任何事情。这就是我创造的内容:
@interface WSImageGalleryCollectionView : UICollectionView
@end
.. ..和
@implementation WSImageGalleryCollectionView
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Touches began");
[super touchesBegan:touches withEvent:event];
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSLog(@"Hit test reached");
return [super hitTest:point withEvent:event];
}
@end
注意:手势识别器似乎有完全相同的问题,这就是我尝试使用touchesBegan进行较低级别的原因。
答案 0 :(得分:12)
您只需将视图设置为背景视图,然后可以添加手势识别器:
collectionView.backgroundView = [[UIView alloc] init];
[collectionView.backgroundView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnBackgroundRecognized)]];
答案 1 :(得分:0)
你必须得到阻止touchesBegan
被解雇的其他东西。
对UICollectionView
进行子类化并在UICollectionViewController
内使用该子类将允许您检测touchesBegan
中的中间单元格点击。
我刚试过修改Apple的CollectionView-simple样本。
答案 2 :(得分:0)
在我的情况下,问题是你可以在“清晰”彩色时点击背景。否则,只需设置背景颜色即可使背景可点击。我不太清楚为什么会这样,但简单的解决办法是给它一个背景颜色。
编辑:实际上,这可能与设置“不透明”标志有关。