6

UICollectionView をサブクラス化し、 and をオーバーライドしようとしまし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

注: ジェスチャ レコグナイザーにもまったく同じ問題があるようです。

4

3 に答える 3

12

ビューをバックグラウンド ビューとして設定するだけで、ジェスチャ レコグナイザーを好きなように追加できます。

collectionView.backgroundView = [[UIView alloc] init];
[collectionView.backgroundView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnBackgroundRecognized)]];
于 2014-03-20T05:38:18.073 に答える
0

私の場合、問題は、背景が「クリア」な色になっているときはいつでも背景をクリックできることでした。それ以外の場合は、背景色を設定するだけで背景をクリック可能にできます。これがなぜなのかよくわかりませんが、簡単な修正は背景色を与えることでした。

編集:実際には、これは「不透明」フラグの設定に関係している可能性があります。

于 2013-11-03T10:38:13.183 に答える
0

touchesBegan発砲を妨げている何か他のものを持っているに違いありません。

UICollectionView内でサブクラス化してそのサブクラスを使用すると、 内のセルUICollectionViewController間のタップを検出できますtouchesBegan

Apple のCollectionView-simple サンプルを変更して試してみました。

于 2013-11-03T10:24:24.460 に答える