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