Swift iOS输入法开发

我会复习一下有关键盘扩展的内容,然后通过使用iOS 8中的新应用扩展API的设计一个摩斯码的输入法 。完成这个教程大约需要花费20分钟 。完整代码
概览
通过使用自定义输入法替换系统输入法,用户可以实现一些特别的功能 。例如一个特别新颖的输入方式,或输入iOS原生并不支持的语言 。自定义输入法的基本功能很简单:通过点击、手势,或者其他输入事件,然后通过一个未分类的对象在当前文本输入对象的文本插入点插入文字 。
当用户选择了某个输入法后,当应用打开时,它将会变为默认的输入法 。因此,任意输入法都应该允许用户切换到另一个输入法 。
对于每一个自定义输入法,有两个很重要的点:
1、信任: 你的自定义输入法能够让你访问用户输入的所有内容,因此你和你的用户之间的信任非常重要 。
2、一个“下一个输入法”选项: 兼容能够让用户切换至另一个输入法必须成为每个自定义输入法界面的一部分 。你必须在你的界面中中提供 。
注意:如果你只是想在系统键盘中加上一些按钮,那么你应该研究一下 自定义数据输入视图 。
自定义输入法所不能实现的
有一些输入对象是自定义输入法不能被使用的情况:安全字段(例如密码),电话号码对象(就像联系人应用中的号码字段) 。
你的自定义输入法不能访问输入框的视图层级,它也不能控制光标和选择文本 。
同样,自定义输入法不能在顶行之外显示任何内容(就像系统键盘当你在后面的行上长按一个键时) 。
沙盒
默认情况下,自定义输入法并没有网络访问,也不能和容纳它的应用共享文件 。如果想实现这些功能,必须在Info.plist文件中将布尔值至YES 。做了这个之后,会扩展自定义输入法的沙盒,就像在 建立和维护用户信任提到的那样 。
如果你确实需要申请访问权限,你的输入法将获得以下权限,每一个都会有相应的责任:
1.访问位置服务和地址本数据库,每一个都需在第一次访问时获得授权 。
2.可选择与容纳该输入法的应用的共享容器,使得在应用中可以定制词汇表 。
3.能够将输入的字符和其他输入事件上传至服务器进行处理 。
4.访问,例如,能够确保输入法的设置以及你的自动修正词汇能够在所有用户设备上同步 。
5.通过包含还输入法的应用,能够访问Game 和应用内购买 。
6.能够和受控应用进行协同,如果你使用来设计该键盘以支持移动设备管理(MDM)
如果你确实要打开这些权限,确保你阅读” 为用户信任而设计“这篇文章,它介绍了你的责任以集如何尊重和保护用户的数据 。
顶层设计
接下来的图形展示了在运行的输入法下有哪些重要的元素,同时展示了在一个典型的开发流程中,他们的位置 。在大部分情况下,我们通过一个应用来容纳这个输入法扩展,一个r来控制这个键盘并针对用户事件给予反馈 。
自定义的输入法模板包含一个 r 的子类,这个就是你的输入法的主要视图控制器 。让我们看一下他的接口来熟悉一下是如何实现的:

  1. class UIInputViewController : UIViewController, UITextInputDelegate, NSObjectProtocol {