我已阅读其他一些文章,例如here和here,但不幸的是,我的代码中存在一些差异,这些差异无法实现这些功能(所以请不要提出这些答案)。
我想在用户点按背景时关闭键盘。通常情况下这很容易,只是我的UITextField
对象位于UIScrollView
内部,因此我无法捕捉触摸事件(UIScrollView
吞下它们,所以它们无法触及基本视图)。解决这个问题的一种方法是注册一个通用手势(点按),但这会捕获所有点击,包括用于提交按钮的点击。
所以基本上,'touchesBegan:withEvent:'不会工作,因为它永远不会被调用,并且手势不会起作用,因为它们不会考虑按钮按下。
以下是问题:有没有办法检测UIScrollView
上的简单点按?一旦我检测到水龙头,我知道如何做其余的事情。谢谢!
答案 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或任何控件元素,然后只处理触摸
我希望它能解决你的问题。