从UIScrollView中解除NumberPad键盘

时间:2010-07-03 10:11:34

标签: iphone

我有一个应用程序,UIScrollView被添加为UIView的子视图。此Scroll视图具有键盘类型设置为numberPad的文本字段。 现在的问题是,当我点击滚动视图中的任何其他位置时,我想要关闭键盘。我怎么能这样做??

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

当我将手势添加到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
相关问题