我有一个带有 UITapGestureRecognizer 的 UIView,在上面我使用 textFields 和复选框。我想使用这个gestureRecongizer通过点击其他任何地方来移除键盘。
但是知道我的复选框调用了识别器的选择器吗?我怎样才能避免这种行为?我已经尝试了 ExclusiveTouch 属性,但它不起作用。
谁能为我推荐一个解决这个问题的好工作流程?
我有一个带有 UITapGestureRecognizer 的 UIView,在上面我使用 textFields 和复选框。我想使用这个gestureRecongizer通过点击其他任何地方来移除键盘。
但是知道我的复选框调用了识别器的选择器吗?我怎样才能避免这种行为?我已经尝试了 ExclusiveTouch 属性,但它不起作用。
谁能为我推荐一个解决这个问题的好工作流程?
你的复选框可能是一段自定义代码?一个按钮或其他类型的 UIView,只要它们是 UIView 的子视图,并且没有自己的处理点击的方法(例如 UITextField),它们最终将调用它们的超级视图识别器。
因此,您可以通过为每个复选框提供其自己的识别器来解决此问题,并让它们处理随后发生的任何事情,或者为所有复选框提供识别器。然后,这可以处理您的点击以选中或取消选中该复选框。
例如类似的东西。
- (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-注册为您的识别器代表tapRecognizer.delegate = self;
(声明您是 UIGestureRecognizerDelegate)
2- 实施shouldReceiveTouch
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
}
3- 检查 touch.view 以确定手势是否应该处理该触摸。在您的情况下,如果它是复选框视图,则返回 NO。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[yourCheckboxClass class]]) {
return NO; // ignore the touch
}
return YES;
}
(您不必使用 isKindOfClass,您可以使用任何其他方式来确定它是否是您的复选框)
我找到了第三种更简单的方法!
我使用了手势属性“cancelsTouchesinview”并将其设置为“NO”
gesture.cancelsTouchesinview = NO;