方法一
点击空白地方隐藏键盘(点击的地方控件有UITableView/UICollectionView的情况 会有延迟,或失效)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//1.获取textField所在的父视图self.view
[self.view endEditing:YES];
//2.直接调用 注销第一响应者
//[self.textField resignFirstResponder];
}
方法二
通过遵守UITextFieldDelegate 隐藏键盘
//1.遵守协议< UITextFieldDelegate >
//2.设置UITextField的键盘类型与返回键
field.returnKeyType = UIReturnKeyDone;
field.keyboardType = UIKeyboardTypeDefault;
注意 UIKeyboardType类型中以下几种类无法设置返回键
UIKeyboardTypeNumberPad:
UIKeyboardTypePhonePad:
UIKeyboardTypeDecimalPad:
UIKeyboardTypeTwitter
//3.代码
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//1.获取textField所在的父视图self.view
[self.view endEditing:YES];
//2.直接调用 注销第一响应者
//[textField resignFirstResponder];
return YES;
}
方法三使用第三方
1.ZYKeyboardUtil
创建一个ZYKeyboard对象,为了让其生存在整个页面实现功能的时间段内,让你的controller持有他吧。
self.keyboardUtil = [[ZYKeyboardUtil alloc] init];
配置animateWhenKeyboardAppearAutomaticAnimBlock,即可全自动处理键盘升降遮挡输入控件问题,且控件resignFirstResponder后自动还原。
只需在Block里利用参数keyboardUtil调用adaptiveViewHandleWithController:adaptiveView:,第一个参数为当前页面controller,第二个参数接收一个可变参数,为当前页面内的单个/多个输入控件或者包裹输入控件的View。
__weak ViewController *weakSelf = self;
[_keyboardUtil setAnimateWhenKeyboardAppearAutomaticAnimBlock:^(ZYKeyboardUtil *keyboardUtil) {
[keyboardUtil adaptiveViewHandleWithController:weakSelf adaptiveView:weakSelf.inputViewOne, weakSelf.inputViewSecond, weakSelf.inputViewThird, weakSelf.inputViewFourth, nil];
}];
2.IQKeyboardManager
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 键盘处理
// 1.开启键盘处理
[IQKeyboardManager sharedManager].enable = YES;
// 2.点击背景回收键盘
[IQKeyboardManager sharedManager].shouldResignOnTouchOutside = YES;
// 关闭键盘上方工具栏
[IQKeyboardManager sharedManager].enableAutoToolbar = NO;
}
总结对比
1.ZYKeyboardUtil
优点:可以避免 ,UITextField位置较为靠下,弹出键盘后,会将导航栏 也一起顶上去问题。
缺点:代码相对于 IQKeyboardManager,需要每个页面都设置。
- IQKeyboardManager
优点: 代码简洁,只需要在appledelegate.m中设置 几句代码 即可监听 所有的有关键盘弹出问题
缺点: 如果UITextField位置较为靠下,弹出键盘后,会将导航栏 也一起顶上去,显示效果 不理想