之前在网易实习的时候,每周都进行一次技术分享,组内成员轮流分享自己最新学习的新技术或者对项目有用的解决方案,我觉得这是个非常好的互相学习、知识拓展和锻炼沟通表达能力的机会。
因之前有过开发 iOS 第三方输入法的经验,而相对其他类型 App 而言,输入法做的人并不多,也就几家大厂在做,所以稍微整理了下开发 iOS 第三方输入法的一些学习过程和经验。
1、为什么要开发第三方输入法?
1、使用第三方输入法替换原生的输入法,可以实现一些特殊的功能,更换皮肤,随意添加表情等。甚至自己编码实现属于自己的输入法。
2、一些特殊的输入方式,滑动输入,九宫格输入等等。
3、输入输入法所不支持的一些语言,如粤语还有些少数民族语言等。
4、自定义词库,字库,快速输入,字词联想,自动校正等等功能。
2、开发第三方输入法需要注意的地方
1、没有权限在某些文本输入对象当中输入。首先是所有安全文本输入对象, 比如将 secureTextEntry 属性设为 YES 的输入框,这种输入框中显示的内容是一个个的点●●●●●●●。
当然,在安全文本输入对象中输入时,系统会强行调用原生的输入法以保证信息的安全。
2、第三方输入法也没有权限在电话号码对象中输入,这些输入对象是专门为电信运营商所指定的一个小的数字字符集而建立的字符串对象,可以通过其是否具有下面任意一个输入法类型来识别。
(1).UIKeyboardTypePhonePad
(2).UIKeyboardTypeNamePhonePad
3、程序开发者可以选择禁止所有的第三方输入法在他们的应用中运行。比如一个银行应用程序的开发者或者一个必须遵循 HIPAA 隐私规则的应用程序开发者将可能会这样做。这些应用程序使用定义在 UIApplicationDelegate 协议中的 application:shouldAllowExtensionPointIdentifier: 方法(返回值为 NO), 从而始终使用系统输入法。
除此之外,还有些需要注意的限制:
由于一个第三方输入法只能在其 UIInputViewController 对象的主视图内显示,它将不能够选择输入框中的文字。文本选择是在应用程序的控制下,而第三方输入法并没有权限来访问它。同时第三方输入法也不允许移动光标位置。因此这也就意味着在编辑信息的时候无法移动光标,粘贴、复制以及剪切功能将无法使用。
一张截自开发者文档的框架示意图:
3、基本的配置信息介绍
1、添加的键盘扩展中,包含一个 UIInputViewController 的子类,这个子类即为主视图控制器,模板还包含了一个所需要的功能—切换输入法 (advanceToNextInputMode)。
2、在 Info.plist 文件中将 RequestOpenAccess 设置为 YES, 即可使用网络访问功能和访问一些应用共享文件。其中可以存放自己字库、词库、表情库
开发时一定要定义并设置地球键(即允许输入法之间进行切换):
4、与文本对象内容相互作用的协议:
1、UIKeyInput 协议
其中的 insertText 和 deleteBackWord 方法。在视图控制器的 textDocumentProxy 中使用这个方法即可。
调用 insertText 方法
[self.textDocumentProxy insertText:@”hello”]; 即在插入点出输入 hello 单词
调用 deleteBackWord,可以自行决定删除多少内容。
通过 textDocumentProxy 的属性即可获得当前插入点之前的内容:
NSString *precedingContext = self.textDocumentProxy.documentContextBeforeInput;
2、UITextInputDelegate
为了响应可输入文本对象内容的变化,亦或者是响应用户在插入点发起的位置变化。
5、如何支持多种语言 (三种方法) 及自动校正功能添加
1、选择为每种语言单独创建一个输入法
2、创建一个多语言的输入法,用户可以动态的切换到需要的语言上,只需要使用 UIInputViewController 类的 primaryLanguage 属性。
3、自定义键盘的自动校正可以使用 UILexicon 这个类,通过这个类来向用户键入的内容提供输入建议和自动校正。UILexicon 对象包含不同来源的词汇:
(1) 从用户的地址簿数据中提取的不成对的姓和名。
(2) 一个常用字词典等等
6、布局上的注意点
1、高度应尽可能跟系统输入法的高度一致。
2、宽度应该与屏幕宽度一样。
7、设计上需要注意的三个方面:
1、安全性,输入的文本是安全的,用户只希望输入的信息能进入输入框或文档中,而不是被保存和上传。
2、尽可能少并恰当的使用用户数据,若记录或请求了其他用户数据,比如通信录数据和地理位置信息,需要负责向用户解释获取这些信息的原因。
3、准确性,输入上屏内容需要精确反应用户的点击。
4、合理性,保证几种键盘输入方式,英文输入,数字输入,符号输入,表情输入等等。
总结
设计上主要就是以上 7 点,总的来说,还是比较容易的。开发也非常的方便。当然以上只是 “表面”,或者说仅仅是 iOS 第三方输入法的设计规范。如何做好一个输入法,核心的功能是查询,用户输入一个“输入码”(拼音、笔画、数字),你得依照“规则” 返回相应的“输出码”(文字、表情、符号等等)。如何快速、准确、优雅的向用户展现出来是输入法的根本,其他的诸如联想功能,快速纠错,匹配功能,模糊查询功能等等,都是提升体验的一个方式。值得每个输入法开发者深思!
转载,来源信息:
作者:林深见鹿
链接:http://www.hetianxiong.com/index.php/archives/20/
来源:http://www.hetianxiong.com/