親テーブルビューでタッチが処理されないようにする
-
05-07-2019 - |
質問
ユーザージェスチャを処理するカスタムテーブルビューセルがあります。ただし、exclusiveTouchをYESに設定した場合でも、タッチイベントの処理中であっても、y値がいくらでも変わると、スコアリングが開始されます。セルでタッチイベントを処理しているときに、テーブルがスクロールしないようにするにはどうすればよいですか?
解決
したがって、残念ながら条件付きで処理する正しい方法はsuperViewに依存します。一部のビューおよびイベント(UITableView selectなど)では、touchesBegan:イベントをnextResponderに転送し、ジェスチャを追跡し、touchesMoved:イベントをnextResponderに転送して、ジェスチャを検出するまでタッチをトリガーする必要があります。 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];
}