由于见面的问题 很多时候键盘会挡住textfiled从而无法编辑 那么如何解决呢 方法有很多种
下面介绍个最简单易懂的方法
原理:根据键盘的高度(216 和 252 ) 和 textfiled 距离底部的距离 来判断整个view界面移动的距离
这里偷点懒 就不做动画效果了 直接改变view的frame 实现键盘弹出界面跟着移动
注意:这边原理是整个view界面移动 而不是textfiled移动
附上代码:
#import "ViewController.h"
@interface ViewController ()<UITextFieldDelegate>
@property (nonatomic,strong)UITextField *txtFiled;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//创建textfiled
UITextField *textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 500, 200, 40)];
//设置样式 以便看清
textFiled.layer.cornerRadius = 10;
textFiled.layer.borderWidth = 1;
textFiled.layer.borderColor = [UIColor orangeColor].CGColor;
[self.view addSubview:textFiled];
self.txtFiled = textFiled;
self.txtFiled.delegate = self;
//设置window的背景色 如果是代码创建的时候设置了 就不需要 这样会使view移动的时候自然点
[UIApplication sharedApplication].keyWindow.backgroundColor = [UIColor whiteColor];
}
//开始编辑
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
CGRect frame = self.txtFiled.frame;
//这边有点绕 就是通过键盘的高度 - textfiled离view底部的高度 如果键盘高度大于离底部高度 就计算其差值让view往上移动相应的值 如果小于 那么就不动
//键盘 两种尺寸 216 和 252 这边取了个大的 你可以获取键盘来判断是哪种 这边跑题了 就用最简单的方式代替
CGFloat offset = 252 + 36 - (self.view.bounds.size.height - CGRectGetMaxY(frame));
//这边就不做动画了 之间闪过去
if (offset > 0)
{
self.view.frame = CGRectMake(0, -offset, self.view.bounds.size.width, self.view.bounds.size.height);
}
}
//用户按下return 或者 回车 键盘消失
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
//取消第一响应
[textField resignFirstResponder];
return YES;
}
//结束编辑
-(void)textFieldDidEndEditing:(UITextField *)textField
{
//调整回原来的位置
self.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end