iOS 多个输入框弹出键盘处理

开发中遇到这样一个场景,有多个输入框

而不同的输入框,需要页面向上偏移的距离不一样

这个时候,需要我们在获取到键盘弹出通知的时候,需要

知道我们开始进行编辑的是哪一个输入框,这个时候

需要我们知道一个技术点,就是

**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);
    //设置一个buffer
    bottomSpace -= 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);
    }];
}
相关推荐
Alger_Hamlet11 小时前
Final Cut Pro X for Mac fcpx音视频剪辑编辑
macos
小雅痞13 小时前
[Mac]利用Hexo+Github Pages搭建个人博客
macos·hexo·github.io
coding随想13 小时前
macOS (M1 Pro) 上 Docker Desktop 安装失败问题及其解决方案
macos·docker·容器
90后的晨仔15 小时前
iOS 中的 RunLoop 详解
前端·ios
比特鹰17 小时前
手把手教你用Flutter打包内测版本的IOS App
前端·ios
coding随想18 小时前
解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题
macos·node.js
Tee xm19 小时前
清晰易懂的Rust安装与配置教程
linux·windows·macos·rust
Billy Qin21 小时前
【Mac】npm error Error: EACCES: permission denied, mkdir‘/Users/...
前端·macos·npm
MingDong5231 天前
AirPods 4(主动降噪版本) 和 老版的AirPods Pro2对比
ios
二流小码农1 天前
鸿蒙开发:Canvas绘制之画笔对象Brush
android·ios·harmonyos