iOS TextFiled、TextView 关于键盘的收起以及处理键盘遮挡

2023-05-16

        在iOS开发中,UITextFiled和UITextView是很常见的两个控件,当我们设置好这两个控件后,点击文字输入区域,系统会自动弹出键盘,但是如何收起键盘、点击哪里收起键盘,以及在iPhone4中键盘弹出后遮挡输入框怎么办呢?


这篇文章将带领大家解决:

1》点击其他空白区域收起键盘

2》点击键盘右下角的键收起键盘

3》处理键盘遮挡问题


一,点击其他空白区域收起键盘

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setUpForDismissKeyboard];    
}

#pragma mark - 回收任何空白区域键盘事件
- (void)setUpForDismissKeyboard {
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    UITapGestureRecognizer *singleTapGR =
    [[UITapGestureRecognizer alloc] initWithTarget:self
                                            action:@selector(tapAnywhereToDismissKeyboard:)];
    NSOperationQueue *mainQuene =[NSOperationQueue mainQueue];
    [nc addObserverForName:UIKeyboardWillShowNotification
                    object:nil
                     queue:mainQuene
                usingBlock:^(NSNotification *note){
                    [self.view addGestureRecognizer:singleTapGR];
                }];
    [nc addObserverForName:UIKeyboardWillHideNotification
                    object:nil
                     queue:mainQuene
                usingBlock:^(NSNotification *note){
                    [self.view removeGestureRecognizer:singleTapGR];
                }];
}

- (void)tapAnywhereToDismissKeyboard:(UIGestureRecognizer *)gestureRecognizer {
    //此method会将self.view里所有的subview的first responder都resign掉
    [self.view endEditing:YES];
}



二,点击键盘右下角的键收起键盘

#pragma mark - TextView 代理方法

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"]) {
        
        [self.workLogTextView resignFirstResponder];
        
        return NO;
    }
    
    return YES;
}

注意:需要遵守textView/textFiled的代理。改代码是textView代理方法,若实际用到的是textFiled,只需调用textFiled的该类方法即可。


三,处理键盘遮挡问题

#pragma mark 键盘遮挡
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    if (self.userInfo.isPhone4) {
        CGFloat offset_y = 0.f;
        if (textView.tag == CALL_CONTENT_TEXTFIRLD) {
            offset_y = 100.f;
        }
        CGPoint point = self.BackScrollView.contentOffset;
        point = CGPointMake(point.x, offset_y);
        [UIView animateWithDuration:0.25 animations:^{
            self.BackScrollView.contentOffset = point;
        }];
    }
    return YES;
}


- (BOOL)textViewShouldEndEditing:(UITextView *)textView{
    if (self.userInfo.isPhone4) {
        CGFloat offset_y = 0.f;
        if (textView.tag == CALL_CONTENT_TEXTFIRLD) {
            offset_y = 100.f;
        }
        CGPoint point = self.BackScrollView.contentOffset;
        point = CGPointMake(point.x, 0);
        [UIView animateWithDuration:0.25 animations:^{
            self.BackScrollView.contentOffset = point;
        }];
    }
    return YES;
}


注意:需要遵守 UIScrollViewDelegate 和 textView/textFiled的代理。需要该页面的父视图是UIScrollView,才能保证弹出键盘时页面向上移动,收起键盘时页面向下移动。代码中的self.BackScrollView就是对应的父视图,使用时请替换掉。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS TextFiled、TextView 关于键盘的收起以及处理键盘遮挡 的相关文章

  • 使用adduser命令在Debian Linux中创建用户

    在本教程中 xff0c 我们将学习如何使用命令行界面在Debian Linux中添加用户 Debian Linux使用adduser命令从命令行创建用户 使用adduser命令后跟用户名来创建具有默认选项的新用户 命令格式 xff1a ad
  • 影响PCB载流能力的因素

    困扰PCB工程师的电源问题是 xff0c 电源层够不够和电源平面够不够 xff0c 以及过孔够不够 载流能力就和温度挂钩 xff1a 在一定温度要求下 xff0c 通过一定电流 为了满足要求 xff0c 随之而来的PCB结构就来了 大家都根
  • PTN和OTN速率统计

    统计PTN和OTN数据速率
  • 边缘计算理解

    边缘计算 xff0c 顾名思义将一部分计算置于边缘侧 xff0c 要么是终端本身 xff0c 要么是接入 端 边缘计算的优点在于延时极低 xff0c 带来很多其他优点诸如隐私安全等 xff0c 不同应用看重点不同 借用比喻 xff0c 诸如
  • 传输线损耗中铜箔的影响

    PCB铜箔在传输线损耗中 xff0c 就是频率的根号因素决定因素 xff0c 其中包含趋肤效应以及粗糙度 xff0c 其中粗糙度在原有损耗的基础上乘以一个系数 该系数就和使用的模型有关 xff1a hammerstad模型 xff0c he
  • 高速SERDES的CDR锁存状态判断

    高速SERDES在调试过程中 xff0c 会经常关注的寄存器就是CDR锁定状态的寄存器 当出现故障时 xff0c 那就得好好了解一下判断的原理了 xff0c 才能更好的定位故障 所谓的判断就是将CDR恢复出来的时钟和参考始终比较 xff0c
  • 通信协议中刚性通道和弹性通道理解

    在通信协议中 xff0c 经常会谈到SDH构建的通道为刚性通道 xff0c IP协议的为弹性通道 xff0c 通道怎么还能分刚性和弹性呢 xff1f SDH就是一个说一不二又实诚的汉子 xff0c 作为传输镖局的镖头 xff0c 给每个客户
  • 10GBASE-KR的Auto Negotiation功能漫谈

    之前写了一个自协商的文章 xff0c 简单介绍了一下协商的功能 xff0c 这次就聊一下细节 xff0c 也就够用就行了 xff0c 再细了就得需要太多精力了 自协商 xff0c 顾名思义就是接入链路的两个芯片 xff0c 自动协商沟通的基
  • PCB电流和温度的关系

    PCB中铜箔的通流能力也是PCB设计工程师关注的指标 xff0c 这直接影响了电源铜箔的大小和层数 xff0c 那通流的定义是什么 xff0c 又和哪些因素有关呢 电流和温度的关系之前有IPC2221标准标准支持 xff0c 也是目前许多所
  • OFDM和CPRI/eCPRI的速率计算

    OFDM原理可以参照如下链接 xff1a https blog csdn net wordwarwordwar article details 79605916 CPRI计算可以参考如下链接 xff1a http www 360doc co
  • 概率论中的联合概率理解

    最近在看信息论中的概念 xff0c 对于联合熵的概念比较混乱 xff0c 从而引发出对联合概率的思考 xff0c 当提到联合概率的时候大家都会看到这么一个图 xff1a 学习概率论是这样理解还可以 xff0c 还能解释条件概率 xff0c
  • 如何在Linux中安装/挂载CD-ROM

    转载来源 xff1a https linuxconfig org how to mount cdrom in linux 如何在Linux中安装 挂载CD ROM CD和DVD使用的是ISO9660文件系统 ISO9660的目标是在各种操作
  • 路漫漫其修远兮

    人类的知识恰似沧海一粟 xff0c 而某一人类个体犹如沧海一粟 大部分人也会有种假象 xff1a 人类现在全能全知 xff0c 上天入地无所不能 xff1b 甚至会认为这就是我们生活的世界 xff0c 我们完全明晰工作原理 世界是未知的 x
  • UCOSII--操作系统家族中的麻雀 前言与自嘲

    平凡的2013年随风逝去 xff0c 泛起的波纹还未抚平 时间总是这样当还未到达时 xff0c 总给人时间充裕的假象 xff0c 而当望着它的背影是却不时地感叹白驹过隙 太多的记忆是那么的刻骨铭心 xff0c 太多的时间从指间流走 xff0
  • UCOSII中的任务切换原理介绍

    1 多任务的引入 之所以引入多任务 xff0c 主要在于提高程序运行的效率 多任务的过程 xff0c 能够有效地发挥交换式任务的运作效率 类似的 xff0c 由于一个任务里面也有瓶颈的地方 xff0c 为了把瓶颈的地方抠出来 xff0c 让
  • ADI公司器件Pspice模型导出原理图symbol

    用于仿真的Pspice模型 xff0c 需要从ADI公司网站下载模型文件 xff0c 格式为 cir 不同于 mod文件 xff0c cir文件导出的管脚与原理图管脚不匹配 xff0c 刚开始会有点无从下手 我自己也是纠结了很长时间 xff
  • Capture到Allegro按页摆放遇到的小问题以及解决办法

    笔者利用网上的方法 xff0c 一遍遍的尝试 xff0c 一遍遍的不行 xff0c 自己定义的user defined property始终在Allegro中找不出来 作为新手 xff0c 纠结了半天 xff0c 甚是郁闷 xff0c 最终
  • 自定义元件package时,元件的新建属性在原理图中无显示

    在制作元件package封装 xff0c 选择package type 封装为Heterogeneous xff0c 给元件新定义封装 xff0c 却在原理图中显示不了 在调出的编辑属性中没用选项 xff0c 无法更改数值 以至于自动分配标
  • 在Altium Designer中使用AUTOCAD快速制作元件封装

    笔者通过使用AutoCAD处理图形 xff0c 并将其导入Altium Designer中 xff0c 快速绘制元件封装 xff0c 省去算间距的时间 本例中以NPN管 B772 封装为SOT 89为例 xff1a 第一步 xff1a 使用
  • 飞思卡尔中出现NO TBDML Interface found

    1 xff0c 安装BDM的驱动器 xff0c 安装完成之后检查USBDM上的绿灯是否闪烁 xff0c 有时候驱承购安装之后 xff0c 但绿灯不亮 xff1b 2 xff0c 若绿灯不亮 xff0c 而且在电脑属性里面的驱动安装成功之后

随机推荐

  • ubuntu装RTL8111/8168B网卡驱动

    给本本装了ubuntu xff0c 结果被上网的问题搞疯了 表现为开机后有较小概率网卡能正常工作 xff08 这两天来N次能用的时候有2次 xff09 正常的时候网络连接信息显示都和win下一样 不能联网的时候网络信息上全部显示0 0 0
  • LabVIEW如何调用C#Winform

    界面交互并不是Labview的强项 xff0c 使用Labview创建UI时候总会受制于VI有限的控件 xff0c 有限的皮肤和有限的控件事件 而当需要实现UI的多文档的窗口 xff0c 窗口的浮动停靠 xff0c 动画等功能时还需要花很大
  • Intellij IDEA 社区版集成 Database Navigator 数据库管理工具

    Intellij IDEA 社区版集成 DB Navigator数据库管理工具 第一步 xff1a 打开IDEA xff0c Intellij IDEA gt Preferences gt Plugins 第二步 xff1a 在Plugin
  • LabVIEW类方法浏览器-Class Method Browser

    随着LabVIEW的类编程应用增多 xff0c 当打开较多的VI进行编辑时候 xff0c 添加该类对应的VI方法到程序后背板上操作显得繁琐 xff08 需要在Project浏览器或类浏览器或库浏览器中找到该类的方法VI xff0c 然后再拖
  • vue学习笔记—bootstrap+vue用户管理

    vue xff0c 读音view xff0c 简单易用的前端框架 特点如下 xff1a 1 一个mvvm的前端框架 xff0c 内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2 中国人尤雨溪维护的个人项目 xff0c
  • Mysql查询创建和导入操作

    如何安装 xff1a https www cnblogs com bigbrotherer p 7241845 html 登录 xff1a mysql uroot p 输入密码 xff1a xxxx 显示当前数据库 xff1a show d
  • Typescript日期Date如何做格式化字符串

    使用一个date fns format的库 安装npm i date fns save import format from 39 date fns format 39 const newdate 61 new Date console l
  • C#匿名类型和动态解析减少定义传输类模板

    C 作为强类型语言 xff0c 在序列化和反序列化 xff08 json xff09 场景中对字符串解析常常需要定义强类型模板 xff0c 造成编码上的繁琐 其实可以使用匿名类型和动态解析减少json序列化时候的数据模板定义 xff1b s
  • Sourcetree 克隆代码,将git@打头路径,写入URL显示无效路径的处理

    情景 xff1a 刚安装完sourceTree 点击 43 xff0c 进行Clone项目 xff0c 输入 git 64 195 178 10 181 datas sys git路径 xff0c 提示 无效路径 信息 处理方法 xff1a
  • docker安装samba,网络硬盘

    安装好docker之后可以安装 dperson samba 使用下面的语句 xff0c 创建默认的用户 docker run it name samba p 139 139 p 445 445 v home ftpserver smb mo
  • Linux下执行可执行文件提示:No such file or directory的解决方法

    最近在Linux下安装交叉编译链工具 xff0c 解压完成后执行却提示 xff1a No such file or directory 查了一下发现我是64位的Ubuntu系统但是执行的是32位程序 xff0c 缺少32位lib库所以无法执
  • C语言typeof详解

    typeof 是 GNU C 标准里特有的扩展 xff0c 标准的 ISO C 并没有这个关键字 xff0c 所以在编译的时候不能加任何 ISO 的 C 标准选项 xff0c 否则会报错 使用时加入 std 61 gnu90 即 GNU 的
  • S5PV210-uboot解析(二)-start.S解析

    start S解析 首先是头文件包含 include lt config h gt include lt version h gt if defined CONFIG ENABLE MMU include lt asm proc domai
  • MPV播放器快捷键

    MPV播放器快捷键 Location of user defined bindings config mpv input conf Lines starting with are comments Use SHARP to assign t
  • u-boot学习总结

    1 移植前准备 Ubuntu 配置ssh tftp nfs 烧写uboot前格式化SD卡 1 Unsupported SD reader 2 dev sdb is NOT identified Vmware出问题在控制面板 gt 程序和功能
  • setjmp和longjmp

    setjmp 和 longjmp 在C标准库 lt setjmp h gt 中 setjmp jmp buf j 必须首先被调用 它表示 使用变量 j 记录现在的位置 函数返回 0 longjmp jmp buf j int i 可以接着被
  • GNU C typeof

    typeof 是 GNU C 标准里特有的扩展 xff0c 标准的 ISO C 并没有这个关键字 xff0c 所以在编译的时候不能加任何 ISO 的 C 标准选项 xff0c 否则会报错 使用时加入 std 61 gnu90 即 GNU 的
  • linux内核常用宏container_of

    linux内核常用宏 container of 定义如下 xff1a linux 2 6 38 8 include linux kernel h container of cast a member of a structure out t
  • 【c语言】对结构体数组按照某项规则进行排序

    这是基于qsort 函数进行的简单排序 xff08 附带其他类型的数组使用qsort 进行的排序 xff09 目录 一 qsort 函数 二 compare 函数 1 结构体数组 1 xff09 升序实现 2 xff09 降序实现 2 整型
  • iOS TextFiled、TextView 关于键盘的收起以及处理键盘遮挡

    在iOS开发中 xff0c UITextFiled和UITextView是很常见的两个控件 xff0c 当我们设置好这两个控件后 xff0c 点击文字输入区域 xff0c 系统会自动弹出键盘 xff0c 但是如何收起键盘 点击哪里收起键盘