解除从UIScrollView NumberPad键盘
问题描述:
我有一个应用程序与UIScrollView作为UIView的子视图添加。此滚动视图有一个键盘类型设置为numberPad的文本框。 现在的问题是,我想关闭键盘,当我点击滚动视图中的任何其他地方。我怎样才能做到这一点 ... ?解除从UIScrollView NumberPad键盘
答
只需在触摸处理程序中调用textField的resignFirstResponder即可。
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [myTextField resignFirstResponder]; }
答
当我加入了手势的UIScrollView
一个子类,我是有在我看来树的各种手势相互干扰,如能够点击子视图,滚动视图的问题,并有键盘在任何情况下都会关闭。我想出了这个解决方案,可以从UIScrollView
或UIViewController
的超类设置。
DismissKeyboardTapGesture
类使用ARC,可与视图下的任何文本字段一起使用,并且不会从按钮等子视图中接受任何点击。还利用iOS7滚动效果来关闭键盘。
从UISScrollView超设置:
_dismissKeyboard = [[DismissKeyboardTapGesture alloc] initWithView:self];
或UIViewController中:
_dismissKeyboard = [[DismissKeyboardTapGesture alloc] initWithView:self.view];
这里是类:
@interface DismissKeyboardTapGesture : NSObject <UIGestureRecognizerDelegate>
@end
@implementation DismissKeyboardTapGesture
- (id)initWithView:(UIView *)view
{
self = [super init];
if (self) {
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
singleTap.cancelsTouchesInView = NO;
singleTap.delegate = self;
[view addGestureRecognizer:singleTap];
if ([view respondsToSelector:@selector(setKeyboardDismissMode:)]) {
// Bonus effect to dismiss keyboard by scrolling
((UIScrollView *)view).keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;
}
}
return self;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
// Don't stop any existing gestures in our view from working
if (otherGestureRecognizer.view == gestureRecognizer.view) {
return YES;
}
return NO;
}
- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer
{
// Close keyboard for any text edit views that are children of the main view
[gestureRecognizer.view endEditing:YES];
}
@end
thanx的解决方案..我一直在努力很长一段时间做这样的事情,它并没有让我觉得这很简单 – 2011-04-01 07:52:26