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);
    }];
}
相关推荐
专业开发者13 小时前
调试 iOS 蓝牙应用的新方法
物联网·macos·ios·cocoa
米有哥17 小时前
[Embodied AI] Mac上安装ROS2
人工智能·macos·ros2
tangbin58308517 小时前
iOS Swift 可选值(Optional)详解
前端·ios
2501_9275410918 小时前
Adobe Lightroom Classic 2025 Lrc图像处理工具Mac
图像处理·macos·adobe·lightroom·照片美化
2501_9275410918 小时前
AlDente Pro Mac电脑充电限制保护工具
macos·电脑·电脑保护·电脑充电保护
Feibo201119 小时前
永远关闭mac更新
macos
weixin_4624462319 小时前
pkg 手动下载依赖并解决打包时网络下载失败(Win / macOS)
macos·pkg
风为你而吹19 小时前
mac m3上使用vscode + esp-idf开发esp32
ide·vscode·macos
七月shi人19 小时前
使用Node版本管理包n,在MAC电脑权限问题
前端·macos
我的golang之路果然有问题19 小时前
win键盘设置改为类似mac 配置
windows·笔记·macos·计算机外设·键盘