iOS开发中防止键盘挡住UITextField解决方案
来源:互联网 发布:java判断题 编辑:程序博客网 时间:2024/05/20 17:26
转载自 http://blog.csdn.net/springsky_/article/details/7941858
最近转入ios开发,发现ios的UITextField如果在屏幕的最底部的时候,键盘不能自动的调整界面的布局,需要手动的调整位置才可以,所以自己研究和拿着笔话,想写一个通用的方法来实现每一个界面自动适配键盘的位置,这样的话,不用每一个界面去操作界面的位置了,具体的解决方案如下:
1. 先创建一个UIViewController 这个UIViewController作为父类,让以后的每一个界面继承这个界面,在这个界面里面实现一个委托,代码如下:
- @interface BaseViewController : UIViewController <UITextFieldDelegate>
2.在这个BaseViewCOntroller.m文件中,现实UITextFieldDelegate中的两个方法,textFieldDidBeginEditing(开始编辑UITextField和 textFieldDidEndEditing(结束编辑UITextField),大家都知道,iphone的键盘都是固定的,都是系统自带的,没有第三方的输入法的,所以键盘的高度是固定的216,我们只要在开始编辑的时候,计算一下当前的UITextField的所在高度相对底部是否有216(就是UITextField的底部边缘相对屏幕的底部是否有216个长度),如果不够216,就需要把整体的view上移达到216高度即可;当我们结束编辑的时候,把之前增加的高度相反操作即可,代码如下:
//设置调整界面的动画效果//设置调整界面的动画效果
- int prewTag ; //编辑上一个UITextField的TAG,需要在XIB文件中定义或者程序中添加,不能让两个控件的TAG相同
- float prewMoveY; //编辑的时候移动的高度
- // 下面两个方法是为了防止TextFiled让键盘挡住的方法
- /**
- 开始编辑UITextField的方法
- */
- -(void) textFieldDidBeginEditing:(UITextField *)textField
- {
- CGRect textFrame = textField.frame;
- float textY = textFrame.origin.y+textFrame.size.height;
- float bottomY = self.view.frame.size.height-textY;
- if(bottomY>=216) //判断当前的高度是否已经有216,如果超过了就不需要再移动主界面的View高度
- {
- prewTag = -1;
- return;
- }
- prewTag = textField.tag;
- float moveY = 216-bottomY;
- prewMoveY = moveY;
- NSTimeInterval animationDuration = 0.30f;
- CGRect frame = self.view.frame;
- frame.origin.y -=moveY;//view的Y轴上移
- frame.size.height +=moveY; //View的高度增加
- self.view.frame = frame;
- [UIView beginAnimations:@"ResizeView" context:nil];
- [UIView setAnimationDuration:animationDuration];
- self.view.frame = frame;
- [UIView commitAnimations];//设置调整界面的动画效果
- }
- /**
- 结束编辑UITextField的方法,让原来的界面还原高度
- */
- -(void) textFieldDidEndEditing:(UITextField *)textField
- {
- if(prewTag == -1) //当编辑的View不是需要移动的View
- {
- return;
- }
- float moveY ;
- NSTimeInterval animationDuration = 0.30f;
- CGRect frame = self.view.frame;
- if(prewTag == textField.tag) //当结束编辑的View的TAG是上次的就移动
- { //还原界面
- moveY = prewMoveY;
- frame.origin.y +=moveY;
- frame.size. height -=moveY;
- self.view.frame = frame;
- }
- //self.view移回原位置
- [UIView beginAnimations:@"ResizeView" context:nil];
- [UIView setAnimationDuration:animationDuration];
- self.view.frame = frame;
- [UIView commitAnimations];
- [textField resignFirstResponder];
- }
3.在上面的代码中,我们已经增加了委托对UITextField的编辑监听,下面我们就要让我们的子类UIViewController去监听委托
代码:
- IDNameField.delegate = self;
0 0
- iOS开发中防止键盘挡住UITextField解决方案
- iOS开发中防止键盘挡住UITextField解决方案
- iOS开发中防止键盘挡住UITextField解决方案
- 解决iOS开发中防止键盘挡住UITextField问题
- ios学习--iphone 防止键盘挡住UITextField解决方案
- iOS 键盘挡住UITextField
- UITextField滑动防止被键盘挡住 终极解决方案
- UITextField滑动防止被键盘挡住 终极解决方案
- IOS 不让键盘挡住UITextField (自适应)
- iOS 虚拟键盘挡住UITextField的解决方法
- ios 解决键盘挡住UITextField的问题
- 防止键盘挡住textFiled的解决方案
- 不让键盘挡住UITextField
- 不让键盘挡住UITextField
- 不让键盘挡住UITextField
- android开发 防止输入键盘挡住界面
- iOS开发----键盘弹出和隐藏时移动视图,防止被键盘挡住
- IOS键盘挡住UITextView的解决方案
- 设计模式C++实现(11)——装饰模式
- 我出现的内存泄露问题
- “textField.placeholder属性中的文字设置后在ios7下在textfield的中间。在ios6下字会往上偏”解决办法
- 滚动到底部加载内容
- 设计模式C++实现(12)——备忘录模式
- iOS开发中防止键盘挡住UITextField解决方案
- HTML5网页的前端技术测试技巧
- 关于yii的AR类的save使用
- 设计模式C++实现(13)——中介者模式
- Oracle使用PL/SQL脚本给表结构相同的动态表添加字段
- 设计模式C++实现(14)——职责链模式
- jQuery向匹配元素中插入新元素
- js 判断字符长度
- Loadrunner安装完毕需要配置的环境