8

このコードを使用して、ビュー全体に UIPanGuestureRecognizer を追加しました。

UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
[[self view] addGestureRecognizer:pgr];

メイン ビュー内には、スワイプによる削除機能を有効にするこのコードを持つ UITableView があります。

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"RUNNING2");
    return UITableViewCellEditingStyleDelete;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row >= _firstEditableCell && _firstEditableCell != -1)
        NSLog(@"RUNNING1");
        return YES;
    else
        return NO;
}

のみRUNNING1がログに出力され、[削除] ボタンは表示されません。この理由は UIPanGestureRecognizer にあると思いますが、よくわかりません。これが正しい場合、これを修正するにはどうすればよいですか。これが正しくない場合は、原因と修正を提供してください。ありがとう。

4

3 に答える 3

16

ドキュメントから:

ジェスチャ レコグナイザがそのジェスチャを認識すると、ビューの残りのタッチはキャンセルされます。

スワイプUIPanGestureRecognizerジェスチャが最初に認識されるため、UITableViewタッチを受信しなくなります。

テーブル ビューがジェスチャ レコグナイザーと同時にタッチを受け取るようにするには、これをジェスチャ レコグナイザーのデリゲートに追加します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
于 2013-08-22T08:51:03.580 に答える