0

ユーザーがの外側をタップしたときにキーボードを非表示にするために使用するがアタッチされているがUIViewあります。今、私はタップしたときにを表示するいくつかのラベルも持っています。ラベルにもを使用します。問題は、イベントが自分自身をカニバライズしているように見えることです。UITapGestureRecognizerUITextFieldsUIPickerViewUITapGestureRecognizer

ラベルをタップするときに両方のイベントハンドラーを実行することは可能ですか?

ありがとうございました。

UITapGestureRecognizer* tapForUnit = [[UITapGestureRecognizer alloc] initWithTarget:self.fridgeItemUnit action:@selector(onTap)];
[self.fridgeItemUnit addGestureRecognizer:tapForUnit];

上記のコードは、ラベルの1つに対するものです。ラベルが機能しなくなるため、ビューのコードを削除しましたが、まったく同じです。唯一の違いは、ビューがアタッチされself.view、実行される関数が次のとおりであるということです。

-(void)dismissKeyboard:(UIGestureRecognizer*)gesture {
    [self.fridgeItemName resignFirstResponder];
    [self.fridgeItemQuantity resignFirstResponder];
}
4

1 に答える 1

2

私は次のメソッドを実装しますUIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

例を添付します:

スクリーンショット

XIBで行ったのは、ユーザーとの対話を有効にすることだけでした。ここにあり.mますUIViewController

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];
    _viewRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTap:)];
    [_viewRecognizer setDelegate:self];
    _labelRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap:)];
    [_labelRecognizer setDelegate:self];
    [self.view addGestureRecognizer:_viewRecognizer];
    [self.label addGestureRecognizer:_labelRecognizer];
}

- (void)viewDidUnload {

    [super viewDidUnload];
    [_viewRecognizer release]; _viewRecognizer = nil;
    [_labelRecognizer release]; _labelRecognizer = nil;
    self.label = nil;
}

- (void)dealloc {
    [_viewRecognizer release];
    [_labelRecognizer release];
    self.label = nil;
    [super dealloc];
}

- (void)labelTap:(UIGestureRecognizer *)recognizer {

    NSLog(@"labelTap");
}

- (void)viewTap:(UIGestureRecognizer *)recognizer {

    NSLog(@"viewTap");
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    NSLog(@"shouldRecognizeSimultaneouslyWithGestureRecognizer");
    return YES;
}

次に、ラベルをタップすると、次のログが表示されます。

shouldRecognizeSimultaneouslyWithGestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer
labelTap
viewTap

そして、ビューをタップすると:

viewTap
于 2012-10-23T19:15:54.813 に答える