國內似乎沒有人願意來為 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