当前位置: 首页 > article >正文

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);
    }];
}

http://www.kler.cn/a/446545.html

相关文章:

  • Linux网络基础--传输层Tcp协议(上) (详细版)
  • Redis应用—9.简单应用汇总
  • [数据结构] 链表
  • C盘下的文件夹
  • threejs 建筑设计(室内设计)软件 技术调研之四 墙体添加真实门窗并保持原材质
  • 前端知识图谱 - JavaScript基础(变量和类型)
  • 我在华为的安全日常
  • 嵌入式硬件面试题
  • Pycharm和Jupyter Notebook的比较【笔记】
  • 【ETCD】【实操篇(六)】使用多种方式从ETCD集群中读取数据【Get keys by prefix】
  • 《商业模式2.0图鉴》读书笔记(如何构建创新驱动的商业模式:打破定律与重塑价值)
  • 使用Redis实现限流
  • 鸿蒙项目云捐助第十九讲云捐助百度智能名片识别
  • YOLO系列正传(三)神经网络的反向传播(back propagation)与公式推导
  • C语言学习-数组练习
  • OB删除1.5亿数据耗费2小时
  • 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述
  • 《计算机组成及汇编语言原理》阅读笔记:p9-p27
  • 构建MacOS应用小白教程(打包 签名 公证 上架)
  • centos7下制作DockerFile 镜像
  • 牛客月赛107
  • 云消息队列 Kafka 版
  • 前端数据可视化库介绍Echarts、D3.js、Plotly、Matplotlib
  • 各种开源汇编、反汇编引擎的非专业比较
  • 电子应用设计方案-65:智能餐桌系统方案设计
  • Windows 无法启动 Redis服务(位于本地计算机上)错误 1067