像微信聊天的时候下面会有一个输入框,点击然后键盘把输入框顶起,取消第一响应,键盘收起输入框会回到原来位置。那么我们怎么更简单的操作呢?
我一般的做法是监控键盘的frame变化 然后判断键盘是弹出还是收起,进行输入框位置变化的操作。不多说直接上关键代码
第一步:注册通知,监听键盘frame的变化
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];
第二步:实现监听到键盘frame变化的方法
- (void)keyboardWillChangeFrameNotification:(NSNotification *)notification{
// 键盘的frame
CGRect keyboardRect = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
// 键盘变化的动画时间
CGFloat keyboardAnimationDuration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
// 距离坐标点的目标y值
CGFloat keyboardY = CGRectGetMinY(keyboardRect);
[UIView animateWithDuration:keyboardAnimationDuration
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
if (keyboardY==SCREENHEIGHT) {
// 键盘目标y值是屏幕的高 说明是收起
设置操作view的y值 为初始y值
}else{
// 键盘弹出
操作view的之前的y值 减去键盘的高度,就是要达到的y值,此处可以有多种计算方式。
}
} completion:^(BOOL finished) {
}];
}
第三步:注意不要忘记移除键盘的监听 防止有时会出现混乱的问题。
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];