使用虚拟键盘来输入资讯,是 iOS 的重要互动方式之一,虚拟键盘通常会自动出现在可以编辑的 UITextField 或是 UITextView 的编辑事件中,叫出键盘固然容易,但是要把它收起来,可就没有这么简单,之前在 UITextField 输入结束后的收起小键盘的方式一文中,介绍了如何在编辑完成之后收起虚拟键盘,但是如果您的元件并没有对应的事件可以让你收起虚拟键盘,那又该如何做?下列我们以类似的元件 UITextView 为例,介绍一些通用的方法。

 1. 点击编辑区以外的地方(UIView)

这是一种很直觉的方法,当不再需要使用虚拟键盘时,只要点击虚拟键盘和编辑区域外的地方,就可以将键盘收起,下面程式码是在 UIView 中内建的触碰事件方法函式,您可以参考 Touch Panel / 触碰萤幕 / 压力感应器的基本使用方式一文,找到更多关于触碰事件的方法函式。

 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {if (![myTextView isExclusiveTouch]) {[myTextView resignFirstResponder];}}

如果要使用此方式请务必记得,你操作画面的 Custom Class 一定要是 UIView 才行。

画面的 Custom Class 为 UIView

2. 点击编辑区域以外的地方(UIControl)

收起虚拟键盘的方式与前一种相同,但是如果你的触碰事件里已经且写满了程式码,那么就可以考虑使用,UIControl 的 Touch Up Inside 事件来收起键盘,方法是将以下程式码与 UIControl 的 Touch Up Inside 事件连结即可。

 - (IBAction)dismissKeyboard:(id)sender {[myTextView resignFirstResponder];}

如果要使用此方式请务必记得,你操作画面的 Custom Class 一定要是 UIControl 才行。

画面的 Custom Class 为 UIControl

将收起键盘的方法与 UIControl 事件连结

3. 使用制作收起键盘的按钮

当没有编辑区域以外的地方可供点击来收起键盘,自己制作一个按钮来收起目前的虚拟键盘,也是一个不错的方法,由于按钮必须在虚拟键盘出现才能显示于画面上,因此必须借用 NSNotificationCenter 来帮助我们判断目前键盘的状态,您可以在类似 Observer Pattern 的 NSNotificationCenter 一文中,找到更多关于 NSNotificationCenter 的资讯。

首先在 viewDidLoad: 事件中,向 NSNotificationCenter 进行註册,告诉 NSNotificationCenter 我们的 doneButtonshow: 方法函式,想要订阅有关 UIKeyboardDidShowNotification 的讯息事件。

 - (void)viewDidLoad {[super viewDidLoad];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (doneButtonshow:) name: UIKeyboardDidShowNotification object:nil];}

现在每当虚拟键盘出现时,就会自动呼叫我们自定义的 doneButtonshow: 方法函式,接下来只要在该方法函式里定义按钮出现的方法即可。

 -(void) doneButtonshow: (NSNotification *)notification {doneButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];doneButton.frame = CGRectMake(0, 228, 70, 35);[doneButton setTitle:@"完成编辑" forState: UIControlStateNormal];[doneButton addTarget: self action:@selector(hideKeyboard) forControlEvents: UIControlEventTouchUpInside];[self.view addSubview:doneButton];}

最后是实作按钮按下去时的 hideKeyboard: 方法函式,务必记得要在函式中移除该按钮。

 -(void) hideKeyboard {[doneButton removeFromSuperview];[myTextView resignFirstResponder];}

4. 使用判断输入字元

如果要使用输入特定字元(例如 return 换行字元)来收起键盘,必须先在类别内的 @interface 区段採用  协定,您可以参考 Protocol 协定的使用方式一文,获得更多关于协定的资讯。

在採用  协定之后,接着实作出协定内的 textView:shouldChangeTextInRange:replacementText:方法函式,此方法函式会在字元输入时触发,而回传的 BOOL 值则代表该字元是否要作用,下列程式码就是在此方法函式中,使用判断输入字元的方式来收起虚拟键盘(判断字元为 return 换行字元)。

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

最后别忘记在 viewDidLoad: 事件中,将 UITextView 的代理物件指向自己,这样程式才能正确找到实作  协定方法函式的类别。

 - (void)viewDidLoad{[super viewDidLoad];myTextView.delegate = self;}

5. 关于键盘遮蔽的问题

如果您在实作上有遭遇到键盘遮蔽编辑区域的问题,可以参考使用 Animation 解决小键盘挡住 UITextField 的问题一文,透过 Core Graphic 的 Animation 功能,在键盘出现时同时移动编辑区域来解决遮蔽的问题。

来源:http://furnacedigital.blogspot.com/2012/01/blog-post_20.html

收起虚拟键盘的各种方法 -- IOS相关推荐

  1. linux系统取消虚拟键盘,关闭iOS虚拟键盘的六种方法

    第四种方法,通过轻击键盘之外的空白区域关闭虚拟键盘. 将屏幕上的view也就是textField的父视图拖一个touch down事件出来,和一个能关闭虚拟键盘的方法连接.如果视图没有touch do ...

  2. Android收起虚拟键盘

    关于收起虚拟键盘,网上能找到的大多是这个: InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_M ...

  3. Win7系统虚拟键盘打开的方法

    有时候自己的键盘使用久了以后经常会突然坏掉,这个时候我们可以开启电脑自带虚拟键盘来解燃眉之急.那么Win7的虚拟键盘该怎么打开?今天就和小编一起来看看Win7系统虚拟键盘打开的方法吧. Win7系统虚 ...

  4. html win10虚拟键盘,笔记本电脑win10虚拟键盘打开的方法

    win10是微软推出的新一代云操作系统,为用户提供多平台体验!如今,您可以在您的电脑中开启虚拟键盘,使用虚拟键盘轻松实现各种输入. 日常工作生活中,使用电脑时,有时需要开启虚拟键盘,包括"屏 ...

  5. qt qml virtrulKeyBoard custom style 虚拟键盘自定义样式方法

    今天我把纠结了好几天的qml自带的虚拟键盘自定义样式的功能实现了,成功修改键盘的样式颜色. 首先把官网的文档先复制一下, 后面会写我自己的实际操作方法, 英文水平真的很重要!!! Keyboard S ...

  6. 关于USB虚拟键盘鼠标,在IOS上面遇FN键的问题实现。

    最近接了一个任务,就是拿USB单片机做一个鼠标和键盘.合成的,其实网上包括芯片生产商都有案例,太多了,但是,都没有谁提起怎么才能支持苹果手机(15以上系统)及苹果电脑的FN键问题.因为FN呢,本身没有 ...

  7. 计算机怎样打开鼠标点的键盘,如何打开计算机虚拟键盘?五种打开计算机虚拟键盘的方法简介...

    随着社会的发展和时代的进步,人们的生活越来越丰富多彩.越来越多的电子产品的出现给人们的生活增添了无限的兴奋.如今,计算机已成为人们生活中必不可少的电子产品之一.我们总能在生活中看到计算机.当然,键盘经 ...

  8. android平板电脑的虚拟键盘,win10平板电脑不弹出虚拟键盘的两种解决方法

    平板电脑升级到了最新版Windows10系统后,发现在开机的时候没有弹出虚拟键盘,这样就没办法打字了,此问题对我们来说其实是比较少见的,如果真的出现这样的情况怎么办?今天小编就为大家整理了win10平 ...

  9. html win10虚拟键盘,五种打开win10虚拟键盘的方法 win10虚拟键盘快捷键

    电脑在使用的过程中,有时会遇到只有鼠标或实体键盘部分按键失灵,或为了体验系统自带的虚拟键盘等情况.此时就需要开启系统的屏幕键盘.屏幕键盘是一个模拟键盘的系统软件,必要的时候可以代替物理键盘Win10做 ...

最新文章

  1. MySQLFabric概述
  2. cront 的应用(摘自鸟哥的私房菜)
  3. 使用word完成毕业论文的所有详细步骤
  4. JMeter(十三)-代理服务器录制脚本
  5. luna16标签数据里的xyz,以及CT的dicom.ImagePositionPatient里的三个值分别代表哪些轴的初始点
  6. windows2003密码忘记了该如何处理
  7. 【基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览
  8. Java 标准开发包_JDK 9系列全套官方下载链接
  9. Android之离线词典
  10. django 一个项目多个App项目搭建
  11. 如何将npy导入matlab,如何在Matlab中读取.npy文件(How to read .npy files in Matlab)
  12. 为啥苹果手机连无线无网络连接服务器,苹果手机网络无法连接怎么回事
  13. 开心网CEO程炳皓称开心微博将一周内对外公测
  14. 免费的云数据库平台Planetscale
  15. Pixelmator Pro Mac(图像编辑软件)
  16. Jetpack Room 使用及原理解析
  17. 工业4.0时代 个性化定制掀起制造业新篇章
  18. 【软件测试】接口——基本测试流程
  19. python添加背景音乐
  20. Linux常用工具大全

热门文章

  1. 信息学奥赛C++语言: 博物馆
  2. 12 FI配置-财务会计-分配会计核算原理至分类帐组
  3. python中什么叫函数_Python 基础起步 (十) 什么叫函数?
  4. 字符串Ascll格式转16进制
  5. 模型计算量(FLOPs)和参数量(Params)的理解
  6. 04简单线性回归实战
  7. Android-Socket的最基础实现以及遇见在2.3可用4.3不可用的解决方法
  8. caffe loss层
  9. 目标2020:'鼠'你最棒!
  10. phpcmsV9一、二级导航栏目loop循环输出、当前高亮显示