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

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. C# 委托及匿名函数

    一. 为什么使用委托,代码如下:(注释掉的是没用委托之前的使用方式,没有注释的是使用了委托的) public delegate string DelProStr(string name); class ...

  2. python全栈开发从入门到放弃之文件处理

    一.文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 事例文件内容 [一棵开花的树] 如何让你遇见我 在我最美丽的时刻 为这 我已在佛前求了五百年 求 ...

  3. ArcEngine开发中“错误类型"****"未定义构造函数”

    from:http://blog.csdn.net/mengdong_zy/article/details/8990593 问题 在ArcEngine开发的时候,在编译时,发现出现这样的错误,出错的地 ...

  4. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)——创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

  5. sql创建表、改变表、关联查询语句

  6. INFO hdfs.DFSClient: Exception in createBlockOutputStream java.net解决办法

    自己安装好Hadoop2.7.x之后,发现dfs中的/bin/hadoop fs -put命令不能够使用,报错如下: [hadoop@master bin]$ ./hadoop fs -put ../ ...

  7. 学习笔记1126 - Fib的计算方法,降低了时间复杂度

    #include <stdio.h> #include <stdlib.h> #define NUM 10 //如果NUM很大的话,应该申请的动态内存要用long类型吧? in ...

  8. Eclipse使用Maven搭建Java Web项目并直接部署Tomcat

    1.环境: Windows 10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven ...

  9. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

  10. Contest-hunter 暑假送温暖 SRM08

    01-07都没写...然后突然来写貌似有点突兀啊...不管了,难得前排记录一下... 吐槽一下赛制...不得不说很强... cf 套oi...很创新...不过还是兹磁ACM或者CF A-1 数据才2& ...