0

私は iOS SDK 6 および 7 を使用しています。別のビュー (「ビュー B」と呼びます) をオーバーレイする UIToolbar があります。このビューにはtouches*、タップを処理するためのメッセージ ハンドラーがあります。もちろん、ツールバーは UIBarButtonItems でいっぱいです。ツールバー ボタン項目が有効になっている場合、それをタップまたはドラッグすると、ビュー B はタッチ メッセージを受信しません。これは目的の効果です。しかし、ボタン項目が無効になっている場合、それをタップまたはドラッグすると、ツールバー (いわば) を介して下のビュー B にメッセージが送信されます。

無効なバー ボタン項目でタップが発生した場合でも、ツールバーでのタップが下にあるビューに渡されないようにするにはどうすればよいですか?

4

2 に答える 2

1

これはまだ直観的でない動作だと思いますが、回避策はかなり簡単です。たとえば touchesBegan イベントは、touches処理するタッチを検討するために通常使用する NSSet を渡します。ここでの問題は、基になるビューが、それに属さず、処理すべきではないタッチを含む一連のタッチを受け取ることです。したがって、以下ではなく:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch* touch in touches)
    {
        ...
    }
}

...使用する...

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSSet* myTouches = [event touchesForView: self];

    for (UITouch* touch in myTouches)
    {
        ...
    }
}

...したがって、SDK が提供するタッチを無視し、「ビュー B」自体に関連するタッチのみを使用します。

于 2013-09-23T18:28:43.597 に答える
0

ビュー B で既にタッチ イベントを手動で処理している場合は、タッチ イベントのタップ ポイントが無効なボタンのフレーム内にあるかどうかを確認します。もしそうなら、それを無視してください。

于 2013-09-23T18:22:18.327 に答える