Ios 如何为我的复选框停用UITapGestureRecognizer的功能?

Ios 如何为我的复选框停用UITapGestureRecognizer的功能?,ios,checkbox,uitapgesturerecognizer,Ios,Checkbox,Uitapgesturerecognizer,我有一个UIView和一个UIApgestureRecognitor,在上面我使用文本字段和复选框。我想使用此手势识别器通过单击其他任何位置来删除键盘 但是你知道我的复选框会调用recongizer的选择器吗? 我怎样才能避免这种行为?我已经尝试过exclusiveTouch属性,但它不起作用 有谁能为我推荐一个解决这个问题的好工作流程吗?你的复选框可能是一个自定义代码?按钮或其他类型的UIView,只要它们是UIView的子视图,并且没有自己的处理点击的方法(例如UITextField),它们

我有一个UIView和一个UIApgestureRecognitor,在上面我使用文本字段和复选框。我想使用此手势识别器通过单击其他任何位置来删除键盘

但是你知道我的复选框会调用recongizer的选择器吗? 我怎样才能避免这种行为?我已经尝试过exclusiveTouch属性,但它不起作用


有谁能为我推荐一个解决这个问题的好工作流程吗?

你的复选框可能是一个自定义代码?按钮或其他类型的UIView,只要它们是UIView的子视图,并且没有自己的处理点击的方法(例如UITextField),它们最终将调用SuperView识别器

所以你可以通过给每个复选框它自己的识别器来解决这个问题,然后让他们处理发生的任何事情,或者给所有复选框一个识别器。然后,这可以处理您的点击以选中或取消选中复选框

例如,沿着这条线的东西

- (void) viewDidLoad
{
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap):];

    [singleTap setNumberOfTapsRequired:1];
    [checkbox addGestureRecognizer:singleTap];
}

- (void) handleSingeTap: (id) sender
{
  //check/uncheck the apropriate chexbox
}

1-注册为您的识别器代理
点击recognizer.delegate=self(声明您是UIgestureRecognitizerDelegate)

2-机具应接收触摸

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

}
3-检查触摸。查看以确定手势是否应注意该触摸。在您的情况下,如果复选框视图为空,则返回NO

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[yourCheckboxClass class]]) {
    return NO; // ignore the touch
    }
    return YES;
    }

(您不必使用Is类,您可以使用任何其他方法来确定它是否是您的复选框)

我找到了第三种更简单的方法

我使用了手势属性“cancelsTouchesinview”并将其设置为“NO”


是的,它们是自定义的代码,是的,它的工作,谢谢你。但是我没有提到我有两个复选框和一个按钮,它们被这个识别器感染了。如果我在每个按钮/复选框中添加一个自己的附加手势识别器,这不是一个非常漂亮的解决方案,不是吗?有更好的方法吗?您可以设置复选框和按钮的标记,然后在单处理程序函数中通过检查标记来检查它是哪个对象,并从此确定您的操作。此解决方案非常简单有效-谢谢:)顺便说一句。我的条件是:如果(touch.view==self.button)。。
gesture.cancelsTouchesinview = NO;