44

私は次のようにメソッドUISwipeGestureRecognizerに a をアタッチしています:UITableViewCellcellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
        gesture.direction = UISwipeGestureRecognizerDirectionRight;
        [cell.contentView addGestureRecognizer:gesture];
        [gesture release];
    }
    return cell;
}

ただし、didSwipeスワイプが成功すると、メソッドは常に2回呼び出されます。最初はジェスチャの開始と終了が原因だと思っていましたが、gestureRecognizer 自体をログアウトすると、どちらも「終了」状態になります。

-(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer {

    NSLog(@"did swipe called %@", gestureRecognizer);
}

コンソール:

2011-01-05 12:57:43.478 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right>
2011-01-05 12:57:43.480 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right>

なぜなのか、本当によくわかりません。私は明らかに終了状態を確認しようとしましたが、どちらも「終了」として表示されるため、それは役に立ちません...何かアイデアはありますか?

4

4 に答える 4

109

ジェスチャ レコグナイザをセルに直接追加する代わりに、 のテーブルビューに追加できますviewDidLoad

-MethodではdidSwipe、影響を受ける IndexPath とセルを次のように特定できます。

-(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer {

  if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        CGPoint swipeLocation = [gestureRecognizer locationInView:self.tableView];
        NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
        UITableViewCell* swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath];
        // ...
  }
}
于 2011-01-05T13:41:43.663 に答える
0

アプリデリゲートで動作します

- (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{

// code

}
于 2012-02-18T10:08:48.270 に答える
0

私はこれと同じ問題を抱えていましたが、テーブルビューの属性で「スクロールを有効にする」にチェックを入れることで解決しました。

私のテーブル ビューはスクロールを必要としないため、スワイプ ジェスチャの後に応答のない最初のタップを取得しないことを除いて、他の方法でアプリに影響を与えることはありません。

于 2014-03-22T11:59:28.327 に答える