最近做的项目中,有一个类似微博中的评论转发功能,屏幕底端有一个输入框用textView来做,当textView成为第一响应者的时候它的Y值随着键盘高度的改变而改变,保证textView紧贴着键盘,但又不会被键盘挡住。

下面是我实现的方法:(利用通知)

// 键盘通知

// 键盘的frame发生改变时发出的通知(位置和尺寸)

// UIKeyboardWillChangeFrameNotification

// UIKeyboardDidChangeFrameNotification

// 键盘显示时发出的通知

// UIKeyboardWillShowNotification

// UIKeyboardDidShowNotification

// 键盘隐藏时发出的通知

// UIKeyboardWillHideNotification

// UIKeyboardDidHideNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];//在这里注册通知

下面是监听通知:

pragma mark - 监听方法

/**

  • 键盘的frame发生改变时调用(显示、隐藏等)

    */
  • (void)keyboardWillChangeFrame:(NSNotification )notification

    {

    // if (self.picking) return;

    /
    *

    notification.userInfo = @{

    // 键盘弹出\隐藏后的frame

    UIKeyboardFrameEndUserInfoKey = NSRect: {{0, 352}, {320, 216}},

    // 键盘弹出\隐藏所耗费的时间

    UIKeyboardAnimationDurationUserInfoKey = 0.25,

    // 键盘弹出\隐藏动画的执行节奏(先快后慢,匀速)

    UIKeyboardAnimationCurveUserInfoKey = 7

    }

    */

    NSDictionary *userInfo = notification.userInfo;

    // 动画的持续时间

    doubleduration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];

    // 键盘的frame

    CGRect keyboardF = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

    // 执行动画

    [UIView animateWithDuration:duration animations:^{

    // 工具条的Y值 == 键盘的Y值 - 工具条的高度

    if(keyboardF.origin.y > self.view.height) { // 键盘的Y值已经远远超过了控制器view的高度

    self.toolbar.y = self.view.height - self.toolbar.height;//这里的self.toolbar就是我的输入框。

      }else{
    self.toolbar.y = keyboardF.origin.y - self.toolbar.height;
    }

    }];

    }

当然,这里我为UIView写了一个类别,实现如下:

.h文件中声明

@interfaceUIView (Extension)

@property(nonatomic, assign) CGFloat x;

@property(nonatomic, assign) CGFloat y;

@property(nonatomic, assign) CGFloat width;

@property(nonatomic, assign) CGFloat height;

@property(nonatomic, assign) CGFloat centerX;

@property(nonatomic, assign) CGFloat centerY;

@property(nonatomic, assign) CGSize size;

@property(nonatomic, assign) CGPoint origin;

@end

.m文件中实现(重写setter 和 getter)

@implementationUIView (Extension)

  • (void)setX:(CGFloat)x

    {

    CGRect frame = self.frame;

    frame.origin.x = x;

    self.frame = frame;

    }

  • (void)setY:(CGFloat)y

    {

    CGRect frame = self.frame;

    frame.origin.y = y;

    self.frame = frame;

    }

  • (CGFloat)x

    {

    returnself.frame.origin.x;

    }

  • (CGFloat)y

    {

    returnself.frame.origin.y;

    }

  • (void)setCenterX:(CGFloat)centerX

    {

    CGPoint center = self.center;

    center.x = centerX;

    self.center = center;

    }

  • (CGFloat)centerX

    {

    returnself.center.x;

    }

  • (void)setCenterY:(CGFloat)centerY

    {

    CGPoint center = self.center;

    center.y = centerY;

    self.center = center;

    }

  • (CGFloat)centerY

    {

    returnself.center.y;

    }

  • (void)setWidth:(CGFloat)width

    {

    CGRect frame = self.frame;

    frame.size.width = width;

    self.frame = frame;

    }

  • (void)setHeight:(CGFloat)height

    {

    CGRect frame = self.frame;

    frame.size.height = height;

    self.frame = frame;

    }

  • (CGFloat)height

    {

    returnself.frame.size.height;

    }

  • (CGFloat)width

    {

    returnself.frame.size.width;

    }

  • (void)setSize:(CGSize)size

    {

    CGRect frame = self.frame;

    frame.size = size;

    self.frame = frame;

    }

  • (CGSize)size

    {

    returnself.frame.size;

    }

  • (void)setOrigin:(CGPoint)origin

    {

    CGRect frame = self.frame;

    frame.origin = origin;

    self.frame = frame;

    }

  • (CGPoint)origin

    {

    returnself.frame.origin;

    }

    @end

    有需要的朋友可以直接用

iOS开发之监听键盘高度的变化的更多相关文章

  1. iOS开发之监听键盘高度的变化 分类: ios技术 2015-04-21 12:04 233人阅读 评论(0) 收藏

    最近做的项目中,有一个类似微博中的评论转发功能,屏幕底端有一个输入框用textView来做,当textView成为第一响应者的时候它的Y值随着键盘高度的改变而改变,保证textView紧贴着键盘,但又 ...

  2. iOS 监听键盘高度,输入框上升

    //设置输入框 ---<因为输入框用了get方法,所以第一次调用输入框要用self 调用>: self.textlab.frame=CGRectMake(, , , ); _textlab ...

  3. iOS开发之多种Cell高度自适应实现方案的UI流畅度分析

    本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...

  4. 转:iOS开发之多种Cell高度自适应实现方案的UI流畅度分析

    本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...

  5. IOS开发-cell的动态高度

    tableView中自定义cell的高度随子控件的内容动态变化,也是用的非常多的地方.现在就来处理一个自定义一个里面有文字(多少不定),图片(有无不定)的cell 首先要准备两个模型,一个是存放数据的 ...

  6. iOS开发 准确计算Coretext高度

    - (int)getAttributedStringHeightWithString:(NSAttributedString *)  string  WidthValue:(int) width{   ...

  7. iOS开发--改变tableHeaderView的高度

    1.先获取tableHeaderView 2.设置它的frame 3.将该view设置回tableview UIView *view=tableView. tableHeaderView; view. ...

  8. iOS:iOS开发非常全的三方库、插件等等

    iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...

  9. iOS开发--iOS及Mac开源项目和学习资料

    文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...

随机推荐

  1. oracle数据库的一次异常起停处理。

    在重启数据库的时候,忘记把一个应用关停了,想起来的时候,就ctrl+c,把数据库shutdown immediate 给强制停下了,把该应用再停止,然后shutdown immdiate,这时候数据报 ...

  2. iOS项目架构 小谈

    层级结构,自底向上 持久层(File,Realm,SQLite)<==>网络层(相信每个公司都有自己的网络层吧)==>业务层(ViewModel)==>展示层(View,VC) ...

  3. 在写一个iOS应用之前必须做的7件事

    转载自:http://www.cocoachina.com/ios/20160316/15685.html 原文:https://medium.com/ios-os-x-development/7-t ...

  4. java 持有对象

    1.泛型和类型安全的容器 ArrayList,可以自动扩充大小的数组,add插入对象,get访问对象,size查看对象数目. 1 /** 2 * 泛型和类型安全的容器 3 * 2016/5/6 4 * ...

  5. AI 人工智能 探索 (九)

    链接:http://pan.baidu.com/s/1c0AM3g0 密码:uccw 今天补充 创建物体 移动物体 ,当点击创建后 ,会出来一个 上图的 ui,他跟随 物体,当你把物体拖动到 指定的地 ...

  6. PHPer转战Android的学习过程以及Android学习

    原文作者: eoeadmin原文地址: http://my.eoe.cn/shuhai/archive/19684.html-------------------------------------- ...

  7. 【嵌入式linux】(第三步):安装串口终端 (ubuntu安装minicom串口终端)

    1.前言 我使用的是USB转串口,芯片是PL2303,貌似ubuntu自带了PL2303的USB驱动,可以直接使用,其它的USB转串口的没试过. 2.minicom安装 在终端中输入 : sudo a ...

  8. C#获取客服端ip和用户名

    . 在asp.Net中专用属性: 获取服务器电脑名:page.server.manchinename 获取用户信息:page.user 获取客户端电脑名:page.request.userhostna ...

  9. 关于submit与document.form1.submit();这2个提交的区别

    首先要知道 一个是按钮提交 一个是在js函数里写代码 document.form1.submit() 提交 区别如下: 从使的方式及效主要有二点区别吧.一.使用submit()提交时,表单中不能存在s ...

  10. 我也谈javascript闭包的原理理解

    参考原文:http://www.oschina.net/question/28_41112 前言:还是一篇入门文章.Javascript中有几个非常重要的语言特性——对象.原型继承.闭包.其中闭包 对 ...