2

出于某种原因,UITapGestureRecognizer当我点击 UIButton 时,我没有调用它的方法。真正奇怪的是我在 Xcode 中使用断点来确保该gestureRecognizer:shouldReceiveTouch:方法返回 YES。手势应该调用它的方法,但事实并非如此。我cancelsTouchesInView设置为YES,但它似乎没有做任何事情。

- (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];
4

2 回答 2

2

按钮有自己的可点击性,因此按钮和手势识别器之间存在冲突。在 iOS 6 中,按钮获胜;手势识别器因此被阻止识别。

在 iOS 6 中,有一个 UIViewgestureRecognizerShouldBegin:方法。UIButton 返回 NO(这是内置的),所以这是冲突的结果。

这比您的gestureRecognizer:shouldReceiveTouch:.

于 2013-05-10T23:54:05.460 回答
-2

尝试设置 UITapGestureRecognizer 的 numberOfTapsRequired 属性。像这样的东西就足够了:

tap.numberOfTapsRequired = 1;

最大限度

于 2013-05-11T05:20:52.990 回答