IOS TextFiled与TextView 键盘的收起以及处理键盘遮挡

发布时间 - 2026-01-10 22:14:29    点击率:

IOS TextFiled与TextView 键盘的收起以及处理键盘遮挡

  在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就是对应的父视图,使用时请替换掉。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# IOS  # 键盘的收起以及处理键盘遮挡  # TextFiled与TextView  # 键盘遮挡  # iOS项目开发键盘弹出遮挡输入框问题解决方案  # 解决移动端 ios 系统键盘遮挡的问题  # IOS NSNotification 键盘遮挡问题的解决办法  # iOS 防键盘遮挡的实例  # iOS中表单列表样式键盘遮挡的解决方案  # 弹出  # 的是  # 只需  # 这两个  # 希望能  # 当我们  # 这篇文章  # 谢谢大家  # 会将  # 时请  # 输入框  # 自动弹出  # NSNotification  # action  # initWithTarget  # selector  # UITapGestureRecognizer  # defaultCenter  # singleTapGR  # nc 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  js实现点击每个li节点,都弹出其文本值及修改  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  英语简历制作免费网站推荐,如何将简历翻译成英文?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  高端网站建设与定制开发一站式解决方案 中企动力  iOS发送验证码倒计时应用  在线教育网站制作平台,山西立德教育官网?  怎么用AI帮你设计一套个性化的手机App图标?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  动图在线制作网站有哪些,滑动动图图集怎么做?  Android Socket接口实现即时通讯实例代码  制作电商网页,电商供应链怎么做?  教你用AI润色文章,让你的文字表达更专业  使用C语言编写圣诞表白程序  如何获取上海专业网站定制建站电话?  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  想要更高端的建设网站,这些原则一定要坚持!  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  网站制作企业,网站的banner和导航栏是指什么?  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel如何处理异常和错误?(Handler示例)  5种Android数据存储方式汇总  Android滚轮选择时间控件使用详解  详解jQuery中的事件  教你用AI将一段旋律扩展成一首完整的曲子  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  EditPlus中的正则表达式实战(5)  如何在万网主机上快速搭建网站?  JS经典正则表达式笔试题汇总  如何快速搭建高效香港服务器网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  怎样使用JSON进行数据交换_它有什么限制