键盘遮挡输入框的问题
2016-06-20 本文已影响89人
yueY_zhou
首先在textfield的代理中注册键盘显示和消失的通知事件
- (void)textFieldDidBeginEditing:(UITextField*)textField
{
//监听键盘的即将显示事件. UIKeyboardWillShowNotification
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWillShow:)name:UIKeyboardWillShowNotificationobject:nil];
//监听键盘即将消失的事件. UIKeyboardWillHideNotification
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardWillHide:)name:UIKeyboardWillHideNotificationobject:nil];
}
键盘显示的触发事件
- (void) keyboardWillShow:(NSNotification*)notification
{
//获取键盘高度,在不同设备上,以及中英文下是不同的
CGFloat kbHeight = [[notification.userInfoobjectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size.height;
//计算出键盘顶端到TextField panel底端的距离(加上自定义的缓冲距离INTERVAL_KEYBOARD)
CGFloat offset = (TextField.frame.origin.y+TextField.frame.size.height+INTERVAL_KEYBOARD) - (self.view.frame.size.height- kbHeight);
//取得键盘的动画时间,这样可以在视图上移的时候更连贯
double duration = [[notification.userInfoobjectForKey:UIKeyboardAnimationDurationUserInfoKey]doubleValue];
//将视图上移计算好的偏移
if(offset >0)
{
[UIView animateWithDuration:duration animations:^{
self.view.frame=CGRectMake(0.0f, -offset,self.view.frame.size.width,self.view.frame.size.height);
}];
}
}
键盘消失的触发事件
- (void) keyboardWillHide:(NSNotification *)notify
{
// 键盘动画时间
double duration = [[notify.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
//视图下沉恢复原状
[UIView animateWithDuration:duration animations:^{
self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}];
}