2

touchesMovediOSで、スーパービューでタッチが始まってもサブビューでイベントを受け取りたい!touchesBegan理想的には、動いている指がサブビューに到達したときにも受信したいと考えています。

これを達成するための最良の方法は何ですか?touchesMoved:withEvent:スーパービューでオーバーライドし、ヒットテストを実行してからサブビューを呼び出すことができると思いますが、より良い解決策はありますか? (スーパービューでファーストレスポンダーを辞任しようとしましたが、役に立ちませんでした)

4

1 に答える 1

0

今日、まったく同じ問題を解決しなければなりませんでした。

たとえば、次のようなものがあるとします。これはまさに私のケースの抽象的な説明です。

  • ボタンを含むメイン ビューとサブ ビュー
  • メイン ビューでタッチが開始されたら、サブ ビューでタッチ イベントを受け取りたい
  • 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:メソッドのオーバーライド。

エリック

于 2015-03-21T00:10:38.860 に答える