最近转入ios开发,发现ios的UITextField如果在屏幕的最底部的时候,键盘不能自动的调整界面的布局,需要手动的调整位置才可以,所以自己研究和拿着笔话,想写一个通用的方法来实现每一个界面自动适配键盘的位置,这样的话,不用每一个界面去操作界面的位置了,具体的解决方案如下:
1. 先创建一个UIViewController 这个UIViewController作为父类,让以后的每一个界面继承这个界面,在这个界面里面实现一个委托,代码如下:
1 | @interface BaseViewController : UIViewController <UITextFieldDelegate> |
2.在这个BaseViewCOntroller.m文件中,现实UITextFieldDelegate中的两个方法,
textFieldDidBeginEditing(开始编辑UITextField和
textFieldDidEndEditing(结束编辑UITextField),大家都知道,iphone的键盘都是固定的,都是系统自带的,没有第三方的输入法的,所以键盘的高度是固定的216,我们只要在开始编辑的时候,计算一下当前的UITextField的所在高度相对底部是否有216(就是UITextField的底部边缘相对屏幕的底部是否有216个长度),如果不够216,就需要把整体的view上移达到216高度即可;当我们结束编辑的时候,把之前增加的高度相反操作即可,代码如下:
//设置调整界面的动画效果//设置调整界面的动画效果
08 | -( void ) textFieldDidBeginEditing:(UITextField *)textField |
10 | CGRect textFrame = textField.frame; |
11 | float textY = textFrame.origin.y+textFrame.size.height; |
12 | float bottomY = self.view.frame.size.height-textY; |
18 | prewTag = textField.tag; |
19 | float moveY = 216-bottomY; |
22 | NSTimeInterval animationDuration = 0.30f; |
23 | CGRect frame = self.view.frame; |
24 | frame.origin.y -=moveY; |
25 | frame.size.height +=moveY; |
26 | self.view.frame = frame; |
27 | [UIView beginAnimations:@ "ResizeView" context:nil]; |
28 | [UIView setAnimationDuration:animationDuration]; |
29 | self.view.frame = frame; |
30 | [UIView commitAnimations]; |
36 | -( void ) textFieldDidEndEditing:(UITextField *)textField |
43 | NSTimeInterval animationDuration = 0.30f; |
44 | CGRect frame = self.view.frame; |
45 | if (prewTag == textField.tag) |
48 | frame.origin.y +=moveY; |
49 | frame.size. height -=moveY; |
50 | self.view.frame = frame; |
53 | [UIView beginAnimations:@ "ResizeView" context:nil]; |
54 | [UIView setAnimationDuration:animationDuration]; |
55 | self.view.frame = frame; |
56 | [UIView commitAnimations]; |
57 | [textField resignFirstResponder]; |
3.在上面的代码中,我们已经增加了委托对UITextField的编辑监听,下面我们就要让我们的子类UIViewController去监听委托
代码:
1 | IDNameField.delegate = self; |
IDNameField是我继承BaseViewController的子类UIViewController中的一个UITextField,只要实现了上面的操作,我们的UITextField就可以在每一个界面实现自动适配调整界面,达到防止键盘挡住UITextField的效果了,以上出自
Spring sky ,
转自:http://blog.csdn.net/vipa1888/article/details/7941858