解除从UIScrollView NumberPad键盘

问题描述:

我有一个应用程序与UIScrollView作为UIView的子视图添加。此滚动视图有一个键盘类型设置为numberPad的文本框。 现在的问题是,我想关闭键盘,当我点击滚动视图中的任何其他地方。我怎样才能做到这一点 ... ?解除从UIScrollView NumberPad键盘

只需在触摸处理程序中调用textField的resignFirstResponder即可。

 
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [myTextField resignFirstResponder]; 
} 
+0

thanx的解决方案..我一直在努力很长一段时间做这样的事情,它并没有让我觉得这很简单 – 2011-04-01 07:52:26

当我加入了手势的UIScrollView一个子类,我是有在我看来树的各种手势相互干扰,如能够点击子视图,滚动视图的问题,并有键盘在任何情况下都会关闭。我想出了这个解决方案,可以从UIScrollViewUIViewController的超类设置。

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