ユーザーのジェスチャーを処理するカスタム テーブル ビュー セルがあります。ただし、exclusiveTouch を YES に設定していても、y の値が少しでも変化した瞬間に、タッチ イベントを処理している最中であっても、スコーリングが開始されます。セルでタッチ イベントを処理しているときにテーブルがスクロールしないようにするにはどうすればよいですか?
2 に答える
したがって、条件付きで処理する正しい方法は、残念ながらsuperViewによって異なります。一部のビューとイベント(UITableView selectなど)では、touchesBegan:イベントをnextResponderに転送し、ジェスチャーを追跡し、touchesMoved:イベントをジェスチャーを検出するまでnextResponderに転送し、トリガーされたときにtouchesCancelledを送信する必要があります。 nextResponderに移動し、touchesEnded:またはtouchesCancelled:を受け取るまで、他のすべてのイベントを次のレスポンダー(touchesEnded:およびtouchesCancelled:)から非表示にします。
ただし、UIScrollViewでは、スクロールイベントを処理するためにnextResponderであることに依存しないという特殊なケースがあります(スクロールは、hitTest:などのメソッドで検出される可能性があります)。したがって、転送やイベントに関して何をしても、スクロールは発生します。スクロールが発生しないようにする唯一の方法は、ジェスチャが検出されるとすぐに親ビューのスクロールを無効にし、終了またはキャンセルされたときにスクロールを再度有効にすることです。
UITableView をサブクラス化し、hitTest:withEvent を実装する必要があると思います: これは、セル内で左右にスライドするために作成したカスタム セルに対して行った方法です。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
NSIndexPath *indexPath = [self indexPathForRowAtPoint:point];
UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];
if ([cell isKindOfClass:[MyCustomCell class]])
{
return cell;
}
return [super hitTest:point withEvent:event];
}