UITableView のすべてをカバーする UIView があります。UIView は、表の表示内容を制御するためにジェスチャ認識エンジンを使用しています。UITableView の垂直スクロールと行タップはまだ必要です。これらをジェスチャ認識エンジンからテーブルに渡すにはどうすればよいですか?
3 に答える
セルのindexPathを知る必要がある場合:
- (void)handleSwipeFrom:(UIGestureRecognizer *)recognizer {
CGPoint swipeLocation = [recognizer locationInView:self.tableView];
NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
UITableViewCell *swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath];
}
これは、UIGestureRecognizerおよびUITableViewCellの問題で以前に回答されました。
ジェスチャをテーブル ビューに割り当てると、テーブルがそれを処理します。
UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipeFrom:)];
[gesture setDirection:
(UISwipeGestureRecognizerDirectionLeft
|UISwipeGestureRecognizerDirectionRight)];
[tableView addGestureRecognizer:gesture];
[gesture release];
次に、ジェスチャー アクション メソッドで、方向に基づいて動作します。
- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
[self moveLeftColumnButtonPressed:nil];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
[self moveRightColumnButtonPressed:nil];
}
}
テーブルは、要求したジェスチャを内部で処理した後にのみ渡します。
Rob Bonner の提案を試してみましたが、うまくいきました。ありがとうございました。
しかし、私の場合、方向認識に問題があります。(recognizer.direction は常に 3 を参照) IOS5 SDK と Xcode 4 を使用しています。
「[gesture setDirection:(left | right)]」が原因のようです。(定義済み (dir left | dir right) の計算結果が 3 であるため)
したがって、誰かが私のような問題を抱えていて、左右のスワイプを別々に認識したい場合は、2 つの認識機能を異なる方向のテーブル ビューに割り当てます。
このような:
UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleSwipeLeft:)];
[swipeLeftGesture setDirection: UISwipeGestureRecognizerDirectionLeft];
UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleSwipeRight:)];
[swipeRightGesture setDirection: UISwipeGestureRecognizerDirectionRight];
[tableView addGestureRecognizer:swipeLeftGesture];
[tableView addGestureRecognizer:swipeRightGesture];
以下のジェスチャーアクション:
- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)recognizer {
[self moveLeftColumnButtonPressed:nil];
}
- (void)handleSwipeRight:(UISwipeGestureRecognizer *)recognizer {
[self moveRightColumnButtonPressed:nil];
}
ARC 機能を使用してコーディングしたので、ARC を使用していない場合は、リリース コードを追加してください。
PS: 私の英語はあまり上手ではないので、文章の誤りがあれば、訂正していただければ幸いです :)