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

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. 003-基于URL的权限管理[不使用shiro]

    一.基于url权限管理流程[实现步骤] 基于url拦截是企业中常用的权限管理方法,实现思路是:将系统操作的每个url配置在权限表中,将权限对应到角色,将角色分配给用户,用户访问系统功能通过Filter ...

  2. 【Sql Server】—sql Servler登录失败

    登录失败报错信息如下: 标题: 连接到服务器 ------------------------------ 无法连接到 localhost. ----------------------------- ...

  3. Ubuntu14.04安装QT5.5

    1.进入qt目录下,修改qt安装文件属性 2:执行./qt-opensource-linux-xXXX; 3.启动Qt Creater:进入Qt5./Tools/QtCreater/bin/,可以鼠标 ...

  4. vue之 node.js 的简单介绍

    一.什么是 node.js? 它是可以运行在JavaScript的服务平台 二.安装 1.node.js的特性 - 非阻塞IO模型 - 时间驱动 2.运用场景 - 高并发低业务 - 实时场景 - 聊天 ...

  5. maven项目打WAR包记录

    打了个war包,各种不顺,也是以前没打过的原因,眼高手低了…… cmd 进入项目目录 打开 运行----cmd 进入命令窗口 键入 cd 回车 输入E\:mars\cdc 键入 mvn clean p ...

  6. js, 树状菜单隐藏显示

    js写的不是很严谨~~~嘿嘿   <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  7. PAT 天梯赛 L1-016. 查验身份证 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-016 AC代码 #include <iostream> #include <cstdio&g ...

  8. hadoop28---注解

    spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="ht ...

  9. SQL char Nvarchar 详解

    Nvarchar :  可变长度的 , Unicode 编码.  长度 1-4000,  1个汉子 或者 字符 都是 2个字节. 支持多语言, 配合 大写 N 可以防止出现乱码. char:   固定 ...

  10. 一般处理程序中 C#中对象转化为Json对象

    namespace: Newtonsoft.Json; context.Response.ContentType = "application/text"; 注:这里为什么不是 J ...