国内似乎没有人愿意来为 iOS 系统写一个输入法,除了几个寡头大公司在做以外就没有别的了。走近了中国特有的苹果生态平台看看,发现其实里边都是空壳子,有意义的应用真的是少的可怜。
落格博客最近正在致力于给 iOS 平台写第一款能真正支持码表的双拼输入法,第一个兼容的双拼方案自然是开放的“小鹤双拼”,这中间踩了不少坑,陆续会发一些经验出来。现在,先来紧急记录一个坑:
在键盘使用过程当中,会偶尔弹出 plugin XXX.XXX.KeyBoardName invalidated 报错日志然后键盘就崩了。
当然,好消息是它几乎只出现在模拟器上——我们都知道,模拟器的性能没有真机那么好就是了——但总的来说这个问题还是会遇到,但的确概率挺小的,但问题总要解决,不然用户呼出键盘的时候键盘就会偶尔闪一下,尤其是后台程序突然调到前台的时候。
好了 Talk is cheap, just show me the code :
之前,大家都是这样来给自定义键盘添加 view 的:
1 2 3 4 5 6 |
let nib = UINib(nibName: "Keyboard", bundle: nil) let objects = nib.instantiateWithOwner(self, options: nil) customInterface = objects[0] as! UIView customInterface.frame = view.frame view.addSubview(customInterface) |
把自己用 nib 撸出来的键盘模型添加到默认的键盘view上,实际上不应该这么做,如果你真的自己新建了一个键盘的view,那么就应该直接给 UIInputViewController 的 view 属性赋值!
所以,正确的做法应该是:
1 2 3 4 5 |
let nib = UINib(nibName: "Keyboard", bundle: nil) let objects = nib.instantiateWithOwner(self, options: nil) customInterface = objects[0] as! UIView self.inputView = customInterface |
这样,这个错误就不会再出现了。
自定义键盘的高度
顺便提一句,之所以还保存自定义键盘的引用,是因为这样就可以给它添加约束,而随后我们可以随意调节约束的固定值来改变键盘的高度——实时改变哦!
1 2 |
heightConstraint = NSLayoutConstraint(item: customInterface, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: yourKeyboardHeigt) heightConstraint.priority = 999.0 //避免和其他约束冲突! |
本文由 落格博客 原创撰写:落格博客 » “plugin invalidated” ios 自定义键盘
转载请保留出处和原文链接:https://www.logcg.com/archives/1852.html