今日、まったく同じ問題を解決しなければなりませんでした。
たとえば、次のようなものがあるとします。これはまさに私のケースの抽象的な説明です。
- ボタンを含むメイン ビューとサブ ビュー
- メイン ビューでタッチが開始されたら、サブ ビューでタッチ イベントを受け取りたい
- 1 つの例外はそのボタンです。メイン ビューでボタンをタップすると、ボタンはそれを処理する必要があります。
解決策は、メソッドをオーバーライドする-hitTest:withEvent:
ことです。このメソッドの目的は、タッチを処理するビューを返すことです。
サブ ビューで上書きするか、メイン ビューで上書きするかの 2 つのオプションがあります。サブビューですべてのタッチを処理したい場合は、サブビューに-hitTest:withEvent
戻っself
て処理を完了するだけです。私の場合、メイン ビューのボタンに独自のタッチ検出が必要だったので、-hitTest:withEvent:
次のように代わりにメイン ビューのメソッドをオーバーライドすることで修正しました。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(self.myButton.frame, point))
{
return self.myButton;
}
else
{
return self.mySubView;
}
}
これは絶対的な魅力のように機能します! これがあなたにとってもうまくいくことを願っています:-)
もちろん、特定のニーズに合わせて内部の詳細を変更する必要があり-hitTest:withEvent:
ます-このオーバーライドを特定の領域または特定のコントロールセットに制限したい場合があります-しかし、ポイントは、このスレッドの主な質問への答えがそこにあるということですこの-hitTest:withEvent:
メソッドのオーバーライド。
エリック