1. 程式人生 > >UITapGestureRecognizer和UIButton的點選事件衝突的解決辦法

UITapGestureRecognizer和UIButton的點選事件衝突的解決辦法

問題描述:

       檢視view上有一個UIButton例項btn,綁定了一個點選事件的響應方法buttonClicked:,由於某種需要(如點選空白區域收起鍵盤),為view添加了UITapGestureRecognizer手勢,關鍵程式碼如下:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignRespond)];
    [self.view addGestureRecognizer:tap];
    [tap release];
       執行,點選按鈕btn的時候,方法buttonClicked:未呼叫,呼叫的是UITapGestureRecognizer手勢的回撥方法resignRespond。也就是說UIButton的點選事件被UITapGestureRecognizer截獲了,兩者相互衝突。

解決方法:

       設定UITapGestureRecognizer的代理,然後在協議方法中作判斷,主要程式碼如下:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignRespond)];
    tap.delegate = self;
    [self.view addGestureRecognizer:tap];
    [tap release];
       UITapGestureRecognizer協議方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isKindOfClass:[UIButton class]])
    {
        return NO;
    }
    return YES;
}