最近转入ios开发,发现ios的UITextField如果在屏幕的最底部的时候,键盘不能自动的调整界面的布局,需要手动的调整位置才可以,所以自己研究和拿着笔话,想写一个通用的方法来实现每一个界面自动适配键盘的位置,这样的话,不用每一个界面去操作界面的位置了,具体的解决方案如下:
1. 先创建一个UIViewController 这个UIViewController作为父类,让以后的每一个界面继承这个界面,在这个界面里面实现一个委托,代码如下:
@interface BaseViewController : UIViewController
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让键盘挡住的方法
-(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];//设置调整界面的动画效果
}
-(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;
IDNameField是我继承BaseViewController的子类UIViewController中的一个UITextField,只要实现了上面的操作,我们的UITextField就可以在每一个界面实现自动适配调整界面,达到防止键盘挡住UITextField的效果了
分享到:
相关推荐
ios7隐藏虚拟键盘,解决键盘挡住UITextField问题
对UITextField的类的扩展。 很好用的键盘扩展及键盘回收的使用 只要调用一句话方法 键盘随心所以
UITextField 文本字段控件 小Demo
UITextField或者UITextView放在UIScrollView上弹出键盘修改UIScrollView上移。 还是有点小小的不完美,并不影响整体使用
UITextField和UITextView,前者是单行输入文本框,后者是可滑动的多行输入文本框,在这整个开发过程中,我们需要控制键盘的弹出和收起、在输入结束的时候获取输入的信息,此外,我们还需要保证在键盘弹起的时候不...
UITextField是IOS开发中用户交互中重要的一个控件,常被用来做账号密码框,输入信息框等。 观察效果图 UITextField有以下几种特点: 1.默认占位文字是灰色的 2.当光标点上去时,占位文字变为白色 3.光标是白色...
实现UITextField的键盘隐藏以及为了防止键盘挡住TextField而上移下移
iOS自定义数字键盘 使用简单 适配iPhone6/6PLUS self.keyBoardTF.inputView = [[WSNumberKeyBoard alloc] initWithControlTextField:self.keyBoardTF ReturnButtonName:nil andClickBlock:^(UITextField *...
我们都知道iOS开发中的UITextField有个placeholder属性,placeholder可以很方便引导用户输入。但是UITextView却没有placeholder属性。 一、猥琐的方法 如何让UITextView也有placeholder功能呢?今天给各位分享一个...
在iOS开发中,有时候需要完全自主的定义键盘,用于完整的单词输入,例如计算机应用中,需要一次性的输入sin(,在移动光标时要完整的跳过sin(,在删除时也要完整的删除,这就需要对光标的位置进行精确控制,而ios并...
我们在开发app时界面中经常会有输入框,例如用户登陆界面,一般都是UITextField,当我们点击输入框时会弹出系统键盘,这时如果不调整系统输入框,输入框可能会被键盘覆盖,这种用户体验很不友好,所以这时我们应该让...
TextField 自动换行
iOS UITextField 扩展 密码框
在IOS开法中经常会遇到键盘遮挡屏幕的事情(比如输入账号密码验证码等等),就使得原本都不大的屏幕直接占了一半甚至更多的位置,这倒无所谓,关键是挡住了下面的按钮。这样的话按钮的事件也就触发不了,最好的解决...
UILabel 和UITextField 的常用api 介绍和使用
UITextField是IOS中非常常用的一个控件,用来接收用户输入信息,完成应用和用户的交互。它的主要属性设置如下: //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:...
主要介绍了iOS App开发中UITextField组件的常用属性小结,文中还介绍了UITextField隐藏键盘及为内容增加校验的两个使用技巧,需要的朋友可以参考下