iPhone:用户触摸背景时关闭键盘

时间:2011-05-16 20:29:56

标签: iphone objective-c cocoa-touch first-responder

我已阅读其他一些文章,例如herehere,但不幸的是,我的代码中存在一些差异,这些差异无法实现这些功能(所以请不要提出这些答案)。

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

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

以下是问题:有没有办法检测UIScrollView上的简单点按?一旦我检测到水龙头,我知道如何做其余的事情。谢谢!

2 个答案:

答案 0 :(得分:2)

你不能在scrollview的superview上使用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];
}

答案 1 :(得分: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或任何控件元素,然后只处理触摸

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

相关问题