- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创键10个输入框
for (int i=0; i<10; i++)
{
UITextField *field = [[UITextField alloc]initWithFrame:CGRectMake(20, 20+i*60, 200, 50)];
field.borderStyle = UITextBorderStyleRoundedRect;
field.placeholder = [NSString stringWithFormat:@"第%d个输入框",i];
//设置输入框代理
field.delegate =self;
[self.view addSubview:field];
}
//如果输入框被挡住,那么将self.view上移
//先要获取到键盘的frame,才能得知输入框是否被挡住
//通过添加观察者,来拿到键盘的frame
//监听键盘抬起事件.
//UIKeyboardWillShowNotification 系统封装的事件
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(KeyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
//监听键盘掉下的事件
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(KeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)KeyboardWillShow:(NSNotification *)noti
{
//先取到第7个输入框的下边界
//再取到键盘的上边界
//如果输入框的下边界 - 键盘的上边界 大于0,则代表遮挡
NSLog(@"KeyboardWillShow");
//1.取到输入框的上边界
//取到通知信息
NSDictionary *dic = noti.userInfo;
NSLog(@"dic==%@",dic);
//接收键盘高度信息
NSValue *keyboardValue = [dic objectForKey:@"UIKeyboardFrameEndUserInfoKey"];
CGRect keyboardRect = keyboardValue.CGRectValue;
//2.计算输入框与键盘的间隔
//输入框框下边界 - 键盘上边界
NSInteger offset = _selectField.frame.origin.y +_selectField.frame.size.height - keyboardRect.origin.y;
//大于0代表遮挡
if (offset >0)
{
//将self.view上移offset个高度
self.view.frame = CGRectMake(0, -offset, self.view.frame.size.width, self.view.frame.size.height);
}
}
- (void)KeyboardWillHide:(NSNotification *)noti
{
NSLog(@"KeyboardWillHide");
//键盘消失,self.view还原位置
self.view.frame = self.view.bounds;
}
#pragma mark - UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
//开始编辑的时候,记下选择输入框
//这样才能拿到当前输入框的frame
_selectField = textField;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//让键盘掉下,触发KeyboardWillHide回调
[textField resignFirstResponder];
return YES;
}