欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于iOS自帶九宮格拼音鍵盤和Emoji表情之間的一些坑

 更新時間:2018年05月19日 08:42:37   作者:KANGZUBIN  
這篇文章主要給大家介紹了關(guān)于iOS自帶九宮格拼音鍵盤和Emoji表情之間的一些坑文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

發(fā)現(xiàn)問題

最近產(chǎn)品提了一個需求:要求某個“輸入框”禁止輸入 Emoji 表情,我們能想到的方案是:在 UITextField 的 textField:shouldChangeCharactersInRange:replacementString: 代理方法中判斷即將輸入的字符串是否包含 Emoji 表情,如果包含,就在該方法中返回 NO,不允許輸入。

關(guān)于如何判斷一字符串是否包含 Emoji 表情的方法,網(wǎng)上已經(jīng)有很多代碼片段,一般是通過 Unicode 編碼范圍來判斷 ,詳見這里:https://gist.github.com/cihancimen/4146056 ,方法名記為:

- (BOOL)stringContainsEmoji:(NSString *)string;

按照上述思路開發(fā)完后,Emoji 表情確實(shí)是被限制住無法輸入了,但是當(dāng)把鍵盤切換為 iOS 系統(tǒng)自帶的九宮格拼音鍵盤準(zhǔn)備輸入漢字時,卻發(fā)現(xiàn)拼音無法輸入。這是怎么回事?

解決過程

首先通過觀察系統(tǒng)自帶拼音鍵盤的行為,可以發(fā)現(xiàn),當(dāng)通過拼音來輸入漢字時,系統(tǒng)會先在輸入框中“預(yù)輸入”拼音字母作為占位,等用戶在鍵盤上選中漢字時,輸入框中的占位“拼音字母”就會被替換為所對應(yīng)的漢字,如下圖:

通過斷點(diǎn)調(diào)試我們還發(fā)現(xiàn),在輸入拼音過程中,以“知識小集”(zhishixiaoji)為例,當(dāng)我們通過點(diǎn)擊第 9 個鍵來輸入字母 z 時,在 UITextField 的代理方法中獲取到的即將輸入的字符不是 z ,而是一個符號 ➒ ,而輸入結(jié)束后(textFieldDidChange:)該符號 ➒ 就會被替換為所對應(yīng)的字母,然后當(dāng)點(diǎn)擊第 4 個鍵來輸入字母 h 時,同樣地得到即將輸入的字符為 ➍ ,然后再被替換為 h,以此類推…

我們猜測,蘋果之所以這么做是因?yàn)椋瑢τ诰艑m格拼音鍵盤,一個鍵代表著 3 或 4 個字母,當(dāng)你點(diǎn)擊一個鍵時,它并不知道你要輸入那個字母,所以用一個帶圓圈的數(shù)字符號作為臨時占位,等輸入結(jié)束時才替換為相應(yīng)的字母。

在九宮格拼音鍵盤中,”ABC” 鍵 ~ “WXYZ” 鍵所對應(yīng)的臨時占位符號分別為 ➋➌ … ➒ ,表情 “^-^” 鍵所對應(yīng)的為符號 ☻ ,而這些符號在 stringContainsEmoji: 方法中剛好都被判為是 Emoji,所以當(dāng)輸入框禁止輸入 Emoji 表情時,就會導(dǎo)致拼音也無法輸入。

解決方案

就是在 Emoji 判定方法中,過濾掉上述符號(對應(yīng)的 Unicode 編碼為 U+278b ~ U+2792 和 U+263b),如下:

但我們發(fā)現(xiàn)系統(tǒng)自帶的“全鍵盤拼音輸入”不會有上述問題,因?yàn)槊總€鍵都只代表一個字母:

而且,國內(nèi)常用的第三方輸入法也不會有這個問題,因?yàn)樗鼈儾粫谳斎肟蛑小邦A(yù)輸入”拼音字符(而是把拼音顯示在鍵盤上方),只有等用戶選中漢字時,才把漢字填寫到輸入框中,如下(搜狗輸入法):

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論