出於某種原因,當我點擊一個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];
所以,如果我想從具有優先停止的UIButton,我將不得不繼承的UIButton並覆蓋'gestureRecognizerShouldBegin:'方法。 – bbraunj 2013-05-11 02:47:10
將按鈕手勢識別器附加到按鈕本身會更簡單。然後那個輕擊手勢識別器就會贏。但是,這種殺死按鈕自己的水龍頭;爲什麼不直接使用按鈕的內置動作消息並讓按鈕按照想要的方式工作? – matt 2013-05-11 02:55:34