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]; }