0

我有一个带有 UITapGestureRecognizer 的 UIView,在上面我使用 textFields 和复选框。我想使用这个gestureRecongizer通过点击其他任何地方来移除键盘。

但是知道我的复选框调用了识别器的选择器吗?我怎样才能避免这种行为?我已经尝试了 ExclusiveTouch 属性,但它不起作用。

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

4

3 回答 3

0

你的复选框可能是一段自定义代码?一个按钮或其他类型的 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
}
于 2012-11-28T10:57:21.150 回答
0

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,您可以使用任何其他方式来确定它是否是您的复选框)

于 2012-11-28T11:02:50.920 回答
0

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

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

gesture.cancelsTouchesinview = NO; 
于 2012-11-28T12:46:09.723 回答