从UIScrollView中移除UITextField、UITextView的键盘?

3

我有一个应用程序,其中UIScrollView作为UIView的子视图添加。我已经将UITextFieldUITextview作为UIScrollView的子视图添加。当我点击滚动视图时,我想要隐藏键盘。我该如何做?


只需在您的UIView上添加UITapGestureRecognizer而不是UIScrollView。 - Rajneesh071
4个回答

10

只需添加UITapGestureRecognizer即可。

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
    [scr addGestureRecognizer:singleTap];
}


- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
    //Get touch point
    CGPoint touchPoint=[gesture locationInView:scr];

    //Hide keyBoard
    [self.view endEditing:YES];
}

2
在iOS 7中,您可以轻松实现这一点。
scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

0

试试这个,

- (void)viewDidLoad
{
   [super viewDidLoad];

      UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
      tapGesture.cancelsTouchesInView = NO;
      [scrollView addGestureRecognizer:tapGesture];
      [tapGesture release];
}
-(void)dismissKeyboard
{
    [txtNotes resignFirstResponder];
    [textView resignFirstResponder];
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接