键盘的出现于隐藏(代码实现)=================================

1、通知案例:

#import "ViewController.h"

#import "UIView+FrameExtension.h" // 可以自己写,以后用着方便

#define kDeviceHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 设置视图的背景色

self.view.backgroundColor = [UIColor lightGrayColor];

// 添加第一个文本框 假定位置

UITextField *firstField = [[UITextField alloc]initWithFrame:CGRectMake(50, 300, 200, 40)];

firstField.backgroundColor = [UIColor whiteColor];

[self.view addSubview:firstField];

// 添加第一个文本框

UITextField *secondField = [[UITextField alloc]initWithFrame:CGRectMake(firstField.x, firstField.bottom + 50, firstField.width , firstField.height)];

[self.view addSubview:secondField];

secondField.backgroundColor = [UIColor whiteColor];

// 注册键盘显示的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKeyboard:) name:UIKeyboardWillShowNotification object:nil];

// 注册键盘隐藏的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard: ) name:UIKeyboardWillHideNotification object:nil];

}

// 键盘弹出时执行这个方法,

-(void)showKeyboard:(NSNotification *)notification{

// 定义一个文本框,指向正在编辑的文本框,也就是弹出键盘的文本框

UITextField *txtField;

// 今次遍历当前视图的所有子视图, subViews数组保存的是当前视图所有的子视图

for (UIView *subView in self.view.subviews) {

// 如果这个子视图是一个文本框的话,isKindOfClass方法可以判断某个变量是不是某个类型的变量

if ([subView isKindOfClass:[UITextField class]]) {

// 先把这个子视图转化为文本框

UITextField *tempField = (UITextField *)subView;

// 再判断这个文本框是不是正在编辑

if (tempField.isEditing ) {

// 如果这个文本框正在编辑,就是我要找的文本框,中断循环

txtField = tempField;

break;

}

}

}

NSLog(@"%@", notification);

// 获取通知的userInfo属性

NSDictionary *userInfoDict = notification.userInfo;

// 通过键盘通知的userInfo属性获取键盘的bounds

NSValue *value = [userInfoDict objectForKey:UIKeyboardBoundsUserInfoKey];

// 键盘的大小

CGSize keyboardSize = [value CGRectValue].size;

// 键盘高度

CGFloat keyboardHeight = keyboardSize.height;

CGFloat offset = kDeviceHeight - keyboardHeight - txtField.bottom ;

if (offset < 0 ) {      //这种情况下需要上移

offset = offset - 10 ;     //保存上移的高度

[UIView animateWithDuration:0.5 animations:^{

self.view.transform = CGAffineTransformMakeTranslation(0, offset );

}];

}

}

-(void)hideKeyboard:(NSNotification *)notification{

[UIView animateWithDuration:2 animations:^{

self.view.transform = CGAffineTransformIdentity;

}];

}

// 点击屏幕空白时隐藏键盘

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

[self.view endEditing:YES];

}

@end

二、辞去第一响应者

1、[self.view endEditing:YES];  //编辑结束 点击屏幕会退出键盘

2、[firstField resignFirstResponder]; //辞去第一响应者

3[firstField becomeFirstResponder]; //成为第一响应者

UI-隐藏键盘的更多相关文章

  1. QF——UI之几种常用的隐藏键盘的方法

    怎么在填写完UITextField之后,点击空白处,隐藏软键盘. 下面两个方法都可以隐藏键盘 [tf resignFirstResponder]; 停止textfield的第一响应者 [self.vi ...

  2. iOS之 利用通知(NSNotificationCenter)获取键盘的高度,以及显示和隐藏键盘时修改界面的注意事项

    我们在开发中会遇到这样的情况:调用键盘时需要界面有一个调整,避免键盘遮掩输入框. 但实现时你会发现,在不同的手机上键盘的高度是不同的.这里列举一下: //获取键盘的高度 /* iphone 6: 中文 ...

  3. iOS之隐藏键盘的方式

    一.//触摸空白处隐藏键盘 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [_feedBackTextView r ...

  4. ios隐藏键盘

    1.点击页面空白处隐藏键盘 给viewController里面复写-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event方法,在 ...

  5. UITextView 点return 隐藏键盘

    iOS开发中,发现UITextView没有想UITextField中textFieldShouldReturn:这样的方法,那么要实现UITextView return键隐藏键盘,可以通过判断输入的字 ...

  6. ios-点击屏幕,隐藏键盘

    ios-点击屏幕,隐藏键盘 - (void)getFirstRegist{ //结束键盘编辑 __weak typeof(self)weakSelf = self; UITapGestureRecog ...

  7. IOS 点击空白处隐藏键盘的几种方法

    IOS 点击空白处隐藏键盘的几种方法     IOS7 点击空白处隐藏键盘的几种方法   IOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能 ...

  8. ios隐藏键盘的方式简单应用

    iOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们可以实现点击键盘以外的空白区域来将键盘隐藏, ...

  9. iOS 使用 UIMenuController 且不隐藏键盘的方法

    iOS 使用 UIMenuController 且不隐藏键盘的方法 在键盘显示的时候使用 UIMenuController 弹出菜单,保持键盘显示且可输入的状态. 实现方法有 修改响应链(推荐) 遵循 ...

  10. IOS7 点击空白处隐藏键盘的几种方法

    IOS7 点击空白处隐藏键盘的几种方法   iOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们 ...

随机推荐

  1. sql server dba之路

    转自:https://blog.csdn.net/dba_huangzj/article/details/7841441 在专职DBA工作一年过一个月以后,开通了CSDN的博客专栏,在第一篇文章中,我 ...

  2. 通信—HTTP 协议入门(转载)

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于199 ...

  3. Angular学习笔记—基础(转载)

    创建简单组件 新建组件 $ ng generate component simple-form --inline-template --inline-style # Or $ ng g c simpl ...

  4. Fatal error in launcher: Unable to create process using '"'的报错解决

    执行命令前加python -m就好了 python -m pip install --upgrade pip这条命令用来升级pip

  5. springmvc 标签

    https://www.baeldung.com/spring-mvc-form-tags     1. Overview In the first article of this series we ...

  6. eclipse中自动加载源码的方法

    1.选中项目右键properties--java build path--Libraries--Add External class Folder 找到项目将项目添加进去 2.然后就是这样 3.OK

  7. Connection.setAutoCommit使用的注意事项

    http://blog.csdn.net/xiayimiaokuaile/article/details/6422032 setAutoCommit总的来说就是保持数据的完整性,一个系统的更新操作可能 ...

  8. Collection与Collections、ArrayList和Vector、HashMap和Hashtable(面试常用)

    Collections与Collection 1. Collections是java.util下的类,它包含有各种有关集合操作的静态方法2. Collection是java.util下的接口,它是各种 ...

  9. Oracle大总结

    maven的常见两个指令说明 mvn install 是将你打好的jar包安装到你的本地库中,一般没有设置过是在 用户目录下的 .m2\下面.mvn package 只是将你的代码打包到输出目录,一般 ...

  10. PHP练习题三

    1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21. echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’)); 2.不使用第三个变量交换两个 ...