2

出於某種原因,當我點擊一個UIButton時,我的UITapGestureRecognizer未調用它的方法。真奇怪的是我在Xcode中使用斷點來確保gestureRecognizer:shouldReceiveTouch:方法返回YES。手勢應該稱之爲方法,但事實並非如此。我有cancelsTouchesInView設置爲YES,但它似乎沒有做任何事情。UITapGestureRecognizer不會調用它的目標操作方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([touch.view isKindOfClass: [UIButton class]] && !editingTaskName) 
     return NO; 
    else if ([touch.view isKindOfClass: [UITextField class]]) 
     return NO; 

    return YES; // handle the touch 
} 

下面是我設置所有手勢識別器的代碼。也許其他人正在干擾我的輕拍手勢。

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget: self action: @selector(longPress:)]; 
[longPress setMinimumPressDuration: 0.3]; 
[longPress setDelaysTouchesBegan: YES]; 

[self setLongPressGesture: longPress]; 
[[self tableView] addGestureRecognizer: longPress]; 

UITapGestureRecognizer *backToTableView = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(backTapRecognized:)]; 
[backToTableView setCancelsTouchesInView: YES]; 
[backToTableView setDelegate: self]; 
[backToTableView setEnabled: NO]; 

[self setBackTapGesture: backToTableView]; 
[[self tableView] addGestureRecognizer: backToTableView]; 

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(hideShowEditing:)]; 
[tap setCancelsTouchesInView: YES]; 
[tap setDelegate: self]; 

[self setEditTap: tap]; 
[[self tableView] addGestureRecognizer: tap]; 

回答

1

一個按鈕有它自己的可定位性,所以在按鈕和手勢識別器之間有衝突。在iOS 6中,按鈕獲勝;手勢識別器因此被阻止識別。

在iOS 6中,有一個UIView gestureRecognizerShouldBegin:方法。 UIButton返回NO(這是內置的),所以這是衝突的結果。

這需要比您的gestureRecognizer:shouldReceiveTouch:更高的優先級。

+0

所以,如果我想從具有優先停止的UIButton,我將不得不繼承的UIButton並覆蓋'gestureRecognizerShouldBegin:'方法。 – bbraunj 2013-05-11 02:47:10

+0

將按鈕手勢識別器附加到按鈕本身會更簡單。然後那個輕擊手勢識別器就會贏。但是,這種殺死按鈕自己的水龍頭;爲什麼不直接使用按鈕的內置動作消息並讓按鈕按照想要的方式工作? – matt 2013-05-11 02:55:34

-2

嘗試設置UITapGestureRecognizer的numberOfTapsRequired屬性。像這樣的東西應該足夠了:

tap.numberOfTapsRequired = 1; 

最大

相關問題