#pragma mark - 键盘通知回调方法

//  监听键盘的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];

/*

UIKeyboardAnimationCurveUserInfoKey = 7;   键盘执行动画的节奏

UIKeyboardAnimationDurationUserInfoKey = "0.25"; 键盘弹出动画执行时间

UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {375, 258}}"; 键盘尺寸

UIKeyboardCenterBeginUserInfoKey = "NSPoint: {187.5, 796}"; 键盘当前的位置

UIKeyboardCenterEndUserInfoKey = "NSPoint: {187.5, 538}";  键盘改变后中心的位置

UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 667}, {375, 258}}"; 键盘当前的frame

UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 409}, {375, 258}}"; 键盘改变后的frame

*/

- (void)keyboardWillChangeFrameNotification:(NSNotification *) notification

{

//    NSLog(@"%@",notification.userInfo);

//  1.取出键盘当前的y坐标

CGRect beginFrame =  [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];

CGRect endFrame =  [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

//  2.中间的差值

CGFloat minus =  endFrame.origin.y - beginFrame.origin.y ;

//  3.根据差值改变控制器view的frame

CGRect viewFrame = self.view.frame;

viewFrame.origin.y += minus;

self.view.frame = viewFrame;

}

#pragma mark - tableView代理方法

/**

*  拖拽tableView方法

*/

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

//  退出键盘

[self.view endEditing:YES];

}

#pragma mark -dealloc方法写到最后

- (void)dealloc

{

//  移除通知

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

//随输入框的高度改变高度 >> 用于ScorllView中添加的View !!!

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

NSDictionary* info = [notification userInfo];

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);

self.loginScorllView.contentInset = contentInsets;

self.loginScorllView.scrollIndicatorInsets = contentInsets;

CGRect aRect = self.view.frame;

aRect.size.height -= kbSize.height;

if (!CGRectContainsPoint(aRect, self.loginTitle.frame.origin) ) {

CGPoint scrollPoint = CGPointMake(0.0, self.loginTitle.frame.origin.y-kbSize.height);

[ self.loginScorllView setContentOffset:scrollPoint animated:YES];

}

}

//  通用的 >> 只需改 上面ty的值就行!!

-(void) viewDidAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShowHandler:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHideHandler:)
name:UIKeyboardWillHideNotification
object:nil];
}

-(void) viewDidDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
}

- (void)keyboardWillShowHandler:(NSNotification *)notification
{
NSDictionary * userInfo = notification.userInfo;

CGRect frameEndUserInfo = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGFloat cure = [userInfo[UIKeyboardAnimationCurveUserInfoKey] floatValue];

// CGRect toFrame = self.frame;

CGFloat ty = frameEndUserInfo.origin.y-frameEndUserInfo.origin.y+70;

if (self.view.y != ty) {
[UIView animateWithDuration:duration animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:cure];

self.view.y = -ty;
// self.frame = toFrame;
}];
}
}

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

NSDictionary * userInfo = notification.userInfo;

CGRect frameEndUserInfo = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGFloat cure = [userInfo[UIKeyboardAnimationCurveUserInfoKey] floatValue];

// CGRect toFrame = self.frame;

CGFloat ty = frameEndUserInfo.origin.y -frameEndUserInfo.origin.y-64;

if (self.view.y != ty) {
[UIView animateWithDuration:duration animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:cure];

self.view.y = -ty;
// self.frame = toFrame;
}];
}
}

iOS键盘监听的通知的更多相关文章

  1. ios --键盘监听JYKeyBoardListener

    没有前言,就是一个简单的键盘监听,自动调整输入框的位置不被键盘遮挡 .h // // JYKeyBoardListener.h // // Created by JianF.Sun on 17/9/2 ...

  2. iOS键盘监听事件

    1.注册键盘通知事件 NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; // 键盘将出现事件监听 [center ...

  3. js 获取当前焦点所在的元素、给元素和input控件添加键盘监听事件、添加页面级的键盘监听事件

    页面级的键盘监听事件 document.onkeydown = function (event) { var e = event || window.event || arguments.callee ...

  4. 使用HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)

    之前发布了一款简易的计算器,今天做了一下修改,添加了键盘监听事件,不用再用鼠标点点点啦 JS代码: var yunSuan = 0;// 运算符号,0-无运算;1-加法;2-减法;3-乘法;4-除法 ...

  5. [置顶] java Gui 键盘监听事件

    简单写一个java Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键.比如:按下A控制台就输出A 效果如图: 以下把实现的效果分为几个步骤: 1.新建一个窗体类继承窗体: 2.给这个窗体 ...

  6. java swing button和键盘监听冲突问题

    原因: 点击button会让jframe失去焦点,然后键盘监听不起作用 解决: 让jframe重新获取焦点就行了 jf.setFocusable(true); // JFrame jf = new J ...

  7. JPanel添加键盘监听事件

    因为在自己的游戏需求中谢了要用键盘控制飞机的移动,所以用到键盘监听事件,但是使用了JPanel之后添加了键盘监听事件,按相应的方向键飞机并没有反应.但是如果是为JFrame的内容面板加则会有反应. 为 ...

  8. C#全局键盘监听(Hook)

    一.为什么需要全局键盘监听? 在某些情况下应用程序需要实现快捷键执行特定功能,例如大家熟知的QQ截图功能Ctrl+Alt+A快捷键,只要QQ程序在运行(无论是拥有焦点还是处于后台运行状态),都可以按下 ...

  9. 【转】【C#】全局键盘监听

    using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...

随机推荐

  1. 两个伪类下特有的属性 content

    更加具体的可以参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/content

  2. java系列-使用maven创建web项目(二)

    推荐2个maven找jar包配置的网站,只需要搜索关键字即可找到需要的Jar包,非常方便,比如:MySQL就可以找到mysql-connect-Java.jar. http://search.mave ...

  3. TreeSet入门详解

    看到TreeSet先从最基础的去了解他,他是一个类,他所在的位置是java.util包中. 我们可以看一看他的继承架构图: 该类实现的接口: 1TreeSet案例: TreeSet是一个有序集合,Tr ...

  4. java之google style

    Google的Java编码规范英文版: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html Google的Java编码规范 ...

  5. Why Reflection is slowly?(Trail: The Reflection API)

    反射的使用 反射通常用于在JVM中应用程序运行中需要检查或者修改运行时行为的项目.这是一个相对高级的特性,并且仅仅可以被对深刻理解java原理的开发者使用.这里给出一个警告的意见,反射是一个强大的技术 ...

  6. 使用Oracle ODP.NET 11g的.NET程序发布方法

    使用Oracle ODP.NET 11g的.NET程序发布方法 内容摘要:ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组 ...

  7. 关于JavaScript的浅拷贝和深拷贝

    在 JS 中有一些基本类型像是Number.String.Boolean,而对象就是像这样的东西{ name: 'Larry', skill: 'Node.js' },对象跟基本类型最大的不同就在于他 ...

  8. centos 修改DNS,网关,IP地址

    1.CentOS 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc/resolv.conf  修改以下内容 nameserver 8.8.8.8 #google域名服务器 nameser ...

  9. hiho #1325 : 平衡树·Treap

    #1325 : 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? ...

  10. elasticsearch 口水篇(5)es分布式集群初探

    es有很多特性,分布式.副本集.负载均衡.容灾等. 我们先搭建一个很简单的分布式集群(伪),在同一机器上配置三个es,配置分别如下: cluster.name: foxCluster node.nam ...