0

View Controller で、アイコンのグリッドを構築しています。各アイコンは同じポップアップ ビューを開きますが、異なる情報が表示されます。

私はこの方法でグリッドを作成しています:

 for (int i=0; i<NUM_BADGES; i++) {
    BadgeThumbView *thumb = [[BadgeThumbView alloc] initWithFrame:CGRectMake(posX, posY, 70, 100) 
                                                    andWithLabel:[NSString stringWithFormat:@"BADGE NAME N. %d", i]];
    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onBadgeTapped:)];
    [thumb addGestureRecognizer:gestureRecognizer];
    [thumb setTag:i];
    [more code here....]

 }

onBadgeTapped メソッドでは、ポップアップを作成しています。今私の問題は、すべてが正常に機能することですが、ポップアップが開いているときに、そのボタンを操作しているときに、基になるビューコントローラーでジェスチャ認識エンジンをまだトリガーしていることに気付きました。

基になるビューですべての GestureRecognizers を無効にする方法はありますか? 私の戦略は間違っていますか?そして:簡単な方法で無効/有効にするために、すべてのアイコンに単一の UIGestureRecognizer を使用する方法はありますか?

どうもありがとう

4

2 に答える 2

1

レコグナイザーをビューから削除するか、userInteractionEnabledを設定して一時的に無効にすることができます。ポップアップの実装方法によっては、一度にすべてを無効にできる場合があります。

1つの解決策は、コンテナーUIViewのサブビューとしてthumbsを追加し、そのコンテナーを親ビューに追加することです。次に、コンテナビューでuserInteractionEnabledを設定することにより、すべてを有効/無効にできます。

于 2012-12-07T12:33:03.300 に答える
0

ポップアップが表示されているときにすべてのサムビューに対してuserInteractionを無効にし、このように非表示になっているときに再度有効にするなどの操作を行う必要があると思います。

[[yourSuperView subviews]makeObjectsPerformSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:FALSE]];

それ以外の場合は、すべてのthumbViewsを1つのサブビュー(たとえば「b」)に追加し、次にビュー「b」をスーパービュー(たとえば「a」)にsubViewとして追加し、ポップアップが表示されたときに表示するユーザーインタラクションをオフにbし、ポップアップが消えたときにオンにします

于 2012-12-07T12:33:11.600 に答える