点击空白处隐藏键盘

在用UITextField的时候,点击空白处隐藏键盘,似乎很简单。但是,如果要是很多页面都有UITextField,你要把相同的代码,写上无数遍吗?或者导入框架,仅仅实现这么一个小功能?我将给出这个问题最直接的解决办法!

  • 思路:
    • 键盘弹出的时候会发出通知
    • 想点击空白隐藏键盘,那就给空白处添加手势
    • 所以在发出键盘弹出的通知后,马上给keyWindow添加手势监听
    • 只要用户在键盘弹出后,点击空白处,就会隐藏键盘
    • 当收到键盘隐藏的通知,马上移除手势

思路有了,直接上代码:

//
//  DismissKeyboard.h
//  全局点击空白隐藏键盘
//
//  Created by ljc on 15/7/7.
//  Copyright (c) 2015年 ljc. All rights reserved.
//
/** 使用方法(so easy!)
  * 1.在AppDelegate.m 中 #import "DismissKeyboard.h"
  * 2.在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  *  加上[self openTouchOutsideDismissKeyboard];
 */
#import "AppDelegate.h"
@interface AppDelegate (DismissKeyboard)
/** 开启点击空白处隐藏键盘功能 */
- (void)openTouchOutsideDismissKeyboard;
@end
@implementation AppDelegate (DismissKeyboard)
/** 开启点击空白处隐藏键盘功能 */
- (void)openTouchOutsideDismissKeyboard
{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(addGesture) name:UIKeyboardDidShowNotification object:nil];
}
- (void)addGesture
{
    [self.window addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(disappearKeyboard)]];
}
- (void)disappearKeyboard
{
    [self.window endEditing:YES];
    [self.window removeGestureRecognizer:self.window.gestureRecognizers.lastOb ject];
}
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}
@end

关键点在于要在全局有效,所以选择给window添加手势,但是不能一直给他添加手势,会覆盖掉其他的屏幕触摸事件,所以在键盘隐藏之后,马上移除掉手势。

使用方法

如果你不想自己敲,直接导入源文件(不到1kb)就好:

  1. 在AppDelegate.m 中 #import "DismissKeyboard.h"
  2. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 加上[self openTouchOutsideDismissKeyboard];

你可能感兴趣的:(点击空白处隐藏键盘)