背景及问题
输入法需要在输入框(IMKTextInput)切换时做一些清理工作,比如说清理之前未输入原码,关闭候选框
可以通过了类重写(override) IMKInputController上 的deactivateServer和activateServer两个方法
这两个方法会在从一个输入框(IMKTextInput)切换到另一个输入框(IMKTextInput)时自动调用
在业火五笔输入法中,有一个保持应用最后输入模式的功能,会在deactivateServer时,缓存当前的输入模式和当前的输入框所发属的应用,以便于在再次切到该应用时,重新设置回原来的输入模式
但是在实际运行时,发现在某些场景下,切换回原应用时,发现并没有切换到原输入模式
原因分析
打开控制台,查看输出日志后发现,在某些场景下activateServer会先执行,然后再执行deactivateServer, 所以导致记录到的输入模式并不是之前应用下的输入模式,因此导致了上述问题
查看Apple文档发现,关于deactivateServer和activateServer的调用顺序,文档中并没有说明,不得不再吐槽一下Apple的开发文档
解决问题
因为deactivateServer和activateServer的调用顺序并不能得到保证,所以只能修改实现,把清理和缓存的工作放在activateServer中,最终问题解决