项目中有很多输入框,有输入框就会唤出键盘,唤出键盘就很经常键盘挡住输入框。如何解决这个问题?

这个问题并不难,相信大家都会写。但是写多了大家就会发现,项目中这么多页面有输入框的,那就意味着很多地方都要写,而且写的代码都差不多。那有没有方便点的,全局控制控制器的view跟随键盘起伏,或者调用一句代码就可以搞定的?

针对这个问题,为此我实现了一句话设置当前控制器的view跟随键盘起伏。

代码不多只有轻量级的两个类:

屏幕快照 2017-09-15 下午7.02.33.png

看看效果:

Untitled2.gif

实现思路 主要代码实现:

1、监听输入框开始编辑,键盘改变的通知

// TextField开始编辑[[NSNotificationCenter defaultCenter] addObserver:instance selector:@selector(textFieldTextDidBeginEditingNotification:) name:UITextFieldTextDidBeginEditingNotificationobject:nil];// TextView开始编辑[[NSNotificationCenter defaultCenter] addObserver:instance selector:@selector(textViewTextDidBeginEditingNotification:) name:UITextViewTextDidBeginEditingNotificationobject:nil];// 键盘将要改变[[NSNotificationCenter defaultCenter] addObserver:instance selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];复制代码

2、获取当前的控制器,判断键盘是否挡住输入框,然后计算偏移view

/// 偏移View
-(void)transformView:(NSNotification *)notification {//获取键盘弹出后的RectNSValue *keyBoardEndBounds=[[notification userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey];CGRect  endRect=[keyBoardEndBounds CGRectValue];UIView *targetView;if ([self.inputObject isKindOfClass:[UIView class]]) {targetView = self.inputObject;}if (!targetView) {return;}UIViewController *vc = [self getCurrentVC];// targetView 在 toView 的 convertRect位置上的位置CGRect targetRect = [targetView convertRect:CGRectMake(0, 0, targetView.frame.size.width, targetView.frame.size.height) toView:vc.view];CGFloat height = [UIScreen mainScreen].bounds.size.height;CGFloat maxY = CGRectGetMaxY(targetRect);CGFloat cha = endRect.origin.y - maxY;if (maxY > endRect.origin.y) { // 键盘会挡住输入框if ([vc.view.subviews.firstObject isKindOfClass:[UIScrollView class]]) {// 如果self.view是UIScrollView,则滚动contentOffsetUIScrollView *scrollView= vc.view.subviews.firstObject;//NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));scrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y + (-cha) + 10);}else {CGFloat interval = 0;if (cha < -10) {interval = 10;}[UIView animateWithDuration:0.25f animations:^{[vc.view setFrame:CGRectMake(vc.view.frame.origin.x, cha - interval, vc.view.frame.size.width, vc.view.frame.size.height)];}];}}if (endRect.origin.y == height) { //键盘回收 deltaY>100//NSLog(@"键盘回收");if ([vc.view.subviews.firstObject isKindOfClass:[UIScrollView class]]) {//UIScrollView *scrollView= self.view.subviews.firstObject;//NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));}else {[UIView animateWithDuration:0.25f animations:^{[vc.view setFrame:CGRectMake(0, 0, vc.view.frame.size.width, vc.view.frame.size.height)];}];self.inputObject = nil;self.keyboardNotifivation = nil;}}
}复制代码

使用方式有两种:

第一种:只导入JHKeyBoardManager.h这个类到项目中,在AppDelegate写一句代码即可

#import "JHKeyBoardManager.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {[JHKeyBoardManager sharedManager];return YES;
}复制代码

第二种:只导入UIViewController+KeyBoardManager.h这个类到项目中,要用的控制器只需掉用一个方法即可

#import "UIViewController+KeyBoardManager.h"
- (void)viewDidLoad {[super viewDidLoad];[self transformViewForKeyboard];
}复制代码

demo地址:github.com/iOSHJH/JHKe…

有问题欢迎issues,若项目对你有用还望不吝给个star让我动力十足?

一句话设置当前控制器的view跟随键盘起伏,妈妈再也不用担心键盘挡住输入框了...相关推荐

  1. win10输入法程序员专用输入设置,妈妈再也不用担心我敲shader出错啦

    直接上图

  2. VMware虚拟网络设置(NAT模式,桥接模式,仅主机模式设置),再也不用担心虚拟机连不上网了。

    前言: 在使用VMware安装Linux之前需要配置网络相关设置,不然安装成功了也无法联网,VMware 给我们提供了3种模式,NAT模式,桥接模式,仅主机模式.接下来就是怎么设置这些网络. 1.VM ...

  3. C++制作加密聊天程序:这样设置一下,再也不用担心女朋友翻你手机了!

    在人多的地方使用聊天真不是很方便,在公交上.拥挤的路上-勉强掏出手机,还要忍受身旁无数"偷窥"的眼光:碰上"手脚多"的朋友,还要面临随时被查机的风险-所以,加密 ...

  4. android设备登录微信是不是被盗了,怀疑微信账号被盗了怎么办(如此设置,再也不用担心微信被盗号了)...

    如今微信在我们的生活中扮演越来越重要的角色,它集社交.支付.娱乐于一身.微信中储存着重要的个人隐私信息还有数额不菲的资金,微信的安全成为很多朋友关心的热点,其实微信是很安全的,只要我们正确的使用,完全 ...

  5. 一句话设置UITextField、UITextview的字数限制和placeholder

    在开发中UITextField和UITextview这两个组件用的是非常频繁的,而且还要限制输入框的字数,UITextview要设置placeholder等,每个控件都要实现代理方法写相应的逻辑代码. ...

  6. ios 添加浮动效果_iOS实现拖拽View跟随手指浮动效果

    效果图: 1.自定义要跟随手指浮动的那个View // // OrangeView.m // 拖拽View跟随手指浮动 // // Created by llkj on 2017/8/16. // C ...

  7. 【iOS-Cocos2d游戏开发之七】添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/455.html ...

  8. 773-780---DOM事件高级(常用鼠标事件,案例:跟随鼠标的天使,常用的键盘事件,案例:模拟京东按键输入内容,案例:模拟京东快递单号查询)

    文章目录 事件高级 7 常用的鼠标事件 7.1常用的鼠标事件 7.2 鼠标事件对象 案例:跟随鼠标的天使 8 常用的键盘事件 8.1 常用的键盘事件 8.2 键盘事件对象 8.3 ASCII 表 案例 ...

  9. 设置APP字体大小不跟随手机系统字体而改变

    设置H5页面中字体大小不跟随手机系统 WebSettings webSettings = webView.getSettings();webSettings.setTextZoom(100); 设置原 ...

最新文章

  1. 【css】如何使光标移动到某个区域后改变形状
  2. Druid 配置 wallfilter
  3. 使用MATLAB如何生成jar包
  4. ubuntu mysql配置教程视频_ubuntu16.04安装配置mysql数据库,分割视频为帧图像
  5. java文件替换一行数据_用Golang替换文件中的一行
  6. 为什么老海员都不舍得下船?
  7. js获取url参数方法
  8. linux系统中文输入法下载64位下载,Linux中文输入法|fcitx中文输入法 V4.2.6 官方安装版...
  9. Micropython加速物联网开发4 - SPI驱动5110LCD屏
  10. Maven使用tomcat8-maven-plugin插件
  11. 2022危险化学品生产单位安全生产管理人员考试试题模拟考试平台操作
  12. moment的使用——简单易懂
  13. MTK平台fastboot单烧img文件
  14. 雷霆战机游戏项目(JAVA)
  15. Win7系统组策略怎么打开 打开组策略的几种方法
  16. E. Jumpy Robot(枚举题)
  17. 安卓隐藏摄像_一款可以隐藏录像的app
  18. 6763个gb2312汉字笔画分析
  19. html链接到另一个网址,怎么设置超级链接跳到另一个网站
  20. 下角标怎么打java_java 实现excel中上下角标处理实现原理

热门文章

  1. Effective C# Item45 : 优先选择强异常安全保证
  2. 探索初级算法学习笔记-快速排序法
  3. android 粘性service,Android服务1 Service
  4. 自定义Word样式模板,设置为默认模板
  5. Vivado无法双击打开xpr工程文件的解决办法
  6. HTML+CSS+JavaScript复习笔记持更(五)——CSS选择器
  7. vs2017搭建Linux的开发调试环境(VisualGDB)
  8. 把char*转换为wchar_t*
  9. 机器学习性能评估指标汇总
  10. 嵌入式笔录(5)-FM解调