在用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)就好:
- 在AppDelegate.m 中 #import "DismissKeyboard.h"
- 在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
加上[self openTouchOutsideDismissKeyboard];