4

私のiOSアプリには、セルの1つにカスタムサブビューを含む UITableView があります。このセルは、タッチ イベント (touchesBegan、touchesEnded、touchesMoved) を処理して自身を更新するインタラクティブなビューです。

問題は、ユーザーが上下に「ドラッグ」すると、tableView がこれらのタッチをキャッチし (タッチをレスポンダーチェーンに渡しませんが)、テーブルをスクロールし、サブビューが正しく機能しないことです。ユーザーがその特定のサブビューに触れている限り、テーブルがスクロールしないようにしたいと思います。

サブビューには、tableView への参照がまったくありません。

テーブルのスクロール動作を防ぐにはどうすればよいですか?


アップデート

以下の回答を受け入れたにもかかわらず、私は自分の状況を別の方法で処理することになりました。カスタム ビューでタッチ イベントを処理し、レスポンダー チェーンを (テーブル セルに) 渡します。セルはタッチ イベントも処理し、それらを使用してスーパービュー (テーブル) でのスクロールを有効/無効にします。

4

2 に答える 2

9

UITableViewで「キャンセル可能なコンテンツタッチ」をオフにすると、これが解決されました(スクロールビュー/タッチの下のUITableView属性インスペクターで)。私はこのSOの質問からこれを得ました:UIScrollView内でUITableViewをスクロールする

UIScrollView:canCancelContentTouches ドキュメントから:

このプロパティの値が NO の場合、コンテンツ ビューがトラッキングを開始すると、指の動きに関係なく、スクロール ビューはスクロールしません。

于 2012-10-02T17:56:18.923 に答える
0

このような場合に私が使用する最も一般的な方法は、イベント チェーンに情報を委譲することです。次の方法でデリゲートを設定します。

subview->cell->table

2 番目にできることは、通知センター経由で通知を送信することです。Table は、通常のスクロールを禁止するすべてのイベントをリッスンします。オーバーシュートですが、コードの一貫性が保たれます。

現時点ではこれ以上のアイデアはありません。

于 2012-10-01T12:22:14.843 に答える