开发中遇到这样一个场景,有多个输入框
而不同的输入框,需要页面向上偏移的距离不一样
这个时候,需要我们在获取到键盘弹出通知的时候,需要
知道我们开始进行编辑的是哪一个输入框,这个时候
需要我们知道一个技术点,就是
**textField的开始编辑的响应方法textFieldDidBeginEditing是比键盘弹出的通知要早的,**根据这个特性,我们就可以在开始编辑的时候,记录一个是哪一个输入框开始了,根据他的位置,设置相应的偏移量
#代码
设置代理
_nameTextField.delegate = self;
实现代理方法
- (void)textFieldDidBeginEditing:(UITextField *)textField {if ([self.delegate respondsToSelector:@selector(didBeginEditing:)]) {[self.delegate didBeginEditingInView:self];}
}
实现方法
- (void)didBeginEditingInView:(AuthenticationVAccountView *)authenticationAccountView {self.editAccountView = authenticationAccountView;NSLog(@" didBeginEditingInAuthenticationAccountView");
}
键盘通知
- (void)keyboardWillShow:(NSNotification *)noti
{AuthenticationVAccountView *userInforView = self.editAccountView;CGRect userInfoViewframe = [self.scrollView convertRect:userInforView.frame toView:DTContextGet().window];CGFloat bottomSpace = UIGetScreenHeight() - CGRectGetMaxY(userInfoViewframe);//设置一个bufferbottomSpace -= 40;CGRect keyboardRect = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];CGFloat boardHeight = keyboardRect.size.height;if ((boardHeight - bottomSpace) < 0) {return;}CGFloat duration = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];Weakify(self);[UIView animateWithDuration:duration animations:^{Strongify(self);self.scrollView.y -= (boardHeight - bottomSpace);self.backgroundView.y -= (boardHeight - bottomSpace);}];
}