3

UITableViewとしてのビューがありsubview、親ビューを完全にカバーしています。親ビューを実装しようとするとtouchesBegan、メソッドがまったく呼び出されていないことに気付きます。この動作をオーバーライドする方法はありますか?

4

4 に答える 4

13

実際には、この動作をオーバーライドする方法があります。親ビューをブロックしている各子オブジェクトを拡張し、次のtouchesBeganようにメソッドをオーバーライドする必要があります。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [super touchesBegan:touches withEvent:event];
   [self.nextResponder touchesBegan:touches withEvent:event];
}

たとえば、UIView内にあるUIScrollView内にUIButtonがある場合、2つのカスタムクラスを作成する必要があります。1つはUIButtonを拡張し、もう1つはUIScrollViewを拡張します。これらのカスタムクラスのそれぞれに、上記のメソッド定義を追加する必要があります。touchesBeganこれらの変更後、親UIViewでイベントを受信できるようになります。

于 2013-02-13T06:46:18.767 に答える
3

このtouchesBeganメソッドは、親ビューのフレームと関係があります。フレームが親ビューに表示されず、で完全に囲まれているsubviews場合、親ビューはタッチを受け取りません。

于 2012-10-10T04:21:17.237 に答える
1

次の設定もできます。

[theViewThatIsCoveringParent setUserInteractionEnabled:NO];

このようにして、すべてのタッチが親によってキャッチされます。

于 2012-10-12T14:54:14.233 に答える
0

これを行う:ビューのレスポンダーチェーンにUIViewControllerがないのはなぜですか?

要するに:

  • ビューをコントローラーにリンクします。
  • タッチされているビュー内にnextResponderPlusSomething(すでに存在する)というプロパティを追加しますnextResponder
  • このviewdidloadプロパティをコントローラー(自己)に設定します
  • 内にtouchesBegan呼び出しを追加しますnextResponderPlusSomething:touchesBegan
  • このイベントをコントローラーに実装し、呼び出したいビューにイベントを送信します。
于 2012-10-12T13:52:38.623 に答える