3

コレクション ビューの UITapGestureRecognizer に問題があり、エラーがわかりません。

長押しジェスチャがあるときはカスタム アクションを実行し、タップ ジェスチャがあるときは何もしたくないので、これらの方法があります。

- (void)activateSelectionMode:(UILongPressGestureRecognizer *)gr
{
    if (![self.collectionView allowsSelection]) {
        [self.collectionView setAllowsSelection:YES];
        NSLog(@"Seleccion activada");
    }
}

- (void)pruebaTap:(UITapGestureRecognizer *)tr
{
    NSLog(@"tap");
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    CGPoint touchPoint = [touch locationInView:self.collectionView];
    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:touchPoint];
    if (indexPath != nil && [gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
    {
        CVCell *cell =  (CVCell *)[self.collectionView cellForItemAtIndexPath:indexPath];

        if ([[cell checkImage] isHidden]) {
            // TODO: Añadir la celda a la lista de celdas seleccionadas
            [[cell checkImage] setHidden:NO];
            NSLog(@"Seleccionada celda %@", [[cell titleLabel] text]);
        } else {
            // TODO: Quitar la celda de la lista de celdas seleccionadas
            [[cell checkImage] setHidden:YES];
            NSLog(@"No seleccionada celda %@", [[cell titleLabel] text]);
        }

        NSLog(@"Entra");

        return YES;
    }

    return NO;
}

最後の方法をコメントすると、それぞれの方法は完全に認識されますが、最後の方法をコメントしないと、タップジェスチャは長押しジェスチャとして認識されます。ここでは、ジェスチャをコレクション ビューに割り当てます。

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pruebaTap:)];
tap.delegate = self;
[self.collectionView addGestureRecognizer:tap];

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(activateSelectionMode:)];
longPress.delegate = self;
[self.collectionView addGestureRecognizer:longPress];

よろしくお願いします。

4

2 に答える 2

2

以下のジェスチャーデリゲートメソッドを実装したかどうかはわかりません。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer
:(UIGestureRecognizer *)otherGestureRecognizer;

デフォルトの実装では NO が返されるため、実装していない場合は問題ありませんが、実装して YES を返した場合は、両方のジェスチャが認識されます。NOを返すと問題が解決する場合があります

于 2013-08-30T12:43:55.370 に答える
0

最後に追加したため、長押しジェスチャは確実に認識されます。同じビューに 2 つのジェスチャを追加しているため、ここでは longPress ジェスチャが UITapGestureRecognizer ジェスチャ (つまりタップ) でオーバーラップするため、毎回長押しジェスチャが発生します。が呼び出されます。

できることは、一度に 1 つずつ追加する必要があることです。

于 2013-08-30T11:00:52.137 に答える