2

我已经阅读了其他一些文章,例如这里这里,但不幸的是,我的代码中存在一些差异,这些差异不会使这些工作(所以请不要建议这些答案)。

当用户点击背景时,我想关闭键盘。通常这很容易,除了我的UITextField对象在 a 内UIScrollView,这使得我无法捕捉到触摸事件(UIScrollView吞下它们,因此它们不会到达基本视图)。解决此问题的一种方法是注册通用手势(点击),但这会捕获所有点击,包括用于提交按钮的点击。

所以基本上,'touchesBegan:withEvent:' 不会工作,因为它永远不会被调用,手势也不会工作,因为它们不考虑按钮按下。

问题来了:有什么方法可以检测到对 a 的简单点击UIScrollView?一旦我检测到水龙头,我就知道如何做剩下的了。谢谢!

4

2 回答 2

2

您不能在滚动视图的超级视图上使用touchesBegan:withEvent,但是子类化 UIScrollView 并在那里处理触摸呢?然后,您可以正常调用 super 的实现,以免踩到 UIScrollView 的脚趾:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    /* Insert code to dismiss keyboard if needed */

    // This makes sure scrolling proceeds normally.
    [super touchesBegain:touches withEvent:event];
}
于 2011-05-16T20:49:26.687 回答
0

我也遇到了同样的问题。在 IOS 6.0 中,它运行良好,但是当我切换到 IOS 5.0 时,它开始显示您提到的相同行为。

IOS 5.0 的锻炼 - 您应该使用 UITapGestureRecognizer。然后将其委托设置为 self 并实现以下委托方法

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

作为

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ! ([touch.view isKindOfClass:[UIControl class]]);
}
@end

上面的代码会验证触摸下的对象不是UIButton或者任何控制元素,然后只处理触摸

我希望它能解决你的问题。

于 2013-03-01T08:00:35.737 回答