6

アニメーション化された画面に表示されるサブビューがあり、それが画面に表示されている場合、タッチイベントを無視するようにスーパービュー(私の場合はバックグラウンドのビュー)が必要です。私はすべてを試しましたが、うまくいきません。

タッチイベントの受信を停止するようにスーパービューを「強制」する方法はありますか?

ありがとう!

4

1 に答える 1

4

あなたがスーパービューと言うとき、私はあなたがアニメーションビューのスーパービューを意味していると思います。Appleのドキュメントは、について非常にuserInteractionEnabled具体的ではありませんが、falseに設定すると、特定のビューではタッチイベントが無効になりますが、サブビューでは無効にならないと思います。再帰的に行うことをお勧めします。ビューのすべてのタッチイベントを無効/有効にするために使用できるコードの例を次に示します。

- (void)setInteraction:(BOOL)allow onView:(UIView *)aView {
    [aView setUserInteractionEnabled:allow];
    for (UIView * v in [aView subviews]) {
        [self setInteraction:allow onView:v];
    }
}

次に、これをスーパービューで呼び出すことができます[self setInteraction:NO onView:[self superview]]。もちろん、これにより、タッチイベントも無効になります。これは、スーパービューでタッチイベントを再帰的に無効にするためです。もちろん、いつでもタッチイベントを再度有効にすることができます[self setUserInteractionEnabled:NO]

また、AppleのUIViewクラスリファレンスには、一部のUIコンポーネントがこのメソッドをオーバーライドすると記載されています。

:一部のUIKitサブクラスは、このプロパティをオーバーライドし、異なるデフォルト値を返します。このプロパティに異なる値を返すかどうかを判断するには、使用するクラスのドキュメントを参照してください。

于 2011-08-06T17:55:37.813 に答える