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

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

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

發(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 表情確實是被限制住無法輸入了,但是當把鍵盤切換為 iOS 系統(tǒng)自帶的九宮格拼音鍵盤準備輸入漢字時,卻發(fā)現(xiàn)拼音無法輸入。這是怎么回事?

解決過程

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

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

我們猜測,蘋果之所以這么做是因為,對于九宮格拼音鍵盤,一個鍵代表著 3 或 4 個字母,當你點擊一個鍵時,它并不知道你要輸入那個字母,所以用一個帶圓圈的數(shù)字符號作為臨時占位,等輸入結(jié)束時才替換為相應的字母。

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

解決方案

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

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

而且,國內(nèi)常用的第三方輸入法也不會有這個問題,因為它們不會在輸入框中“預輸入”拼音字符(而是把拼音顯示在鍵盤上方),只有等用戶選中漢字時,才把漢字填寫到輸入框中,如下(搜狗輸入法):

總結(jié)

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

相關(guān)文章

  • IOS設(shè)置按鈕為圓角的示例代碼

    IOS設(shè)置按鈕為圓角的示例代碼

    這篇文章給大家分享了IOS按鈕設(shè)置為圓角的方法,按鈕的四個角都可隨意設(shè)置為圓角,對大家開發(fā)IOS具有一定的參考借鑒價值。有需要的朋友們可以參考借鑒。
    2016-09-09
  • IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    這篇文章主要為大家詳細介紹了IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 詳解iOS 加載本地HTML,css,js

    詳解iOS 加載本地HTML,css,js

    本篇文章主要介紹了詳解iOS 加載本地HTML,css,js,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 超精準的iOS計步器實現(xiàn)代碼

    超精準的iOS計步器實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了超精準的iOS計步器實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • IOS 開發(fā)之xcode對比兩個分支中同一個文件

    IOS 開發(fā)之xcode對比兩個分支中同一個文件

    這篇文章主要介紹了IOS 開發(fā)之xcode對比兩個分支中同一個文件的相關(guān)資料,希望通過本文能幫助到大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • iOS開發(fā)實現(xiàn)下載器的基本功能(1)

    iOS開發(fā)實現(xiàn)下載器的基本功能(1)

    這篇文章主要為大家詳細介紹了iOS開發(fā)實現(xiàn)下載器基本功能的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • WKWebView、WebView和JS的交互方式詳解

    WKWebView、WebView和JS的交互方式詳解

    這篇文章主要給大家介紹了關(guān)于WKWebView、WebView和JS的交互方式,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • IOS 實現(xiàn)一個死鎖導致 UI 假死的例子

    IOS 實現(xiàn)一個死鎖導致 UI 假死的例子

    這篇文章主要介紹了IOS 實現(xiàn)一個死鎖導致 UI 假死的例子的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • iOS直播類APP開發(fā)流程解析

    iOS直播類APP開發(fā)流程解析

    這篇文章主要為大家詳細解析了iOS直播類APP開發(fā)流程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • iOS 10 推送高階篇(必看)

    iOS 10 推送高階篇(必看)

    本文重點給大家介紹ios10 推送的所有通知類,所以說這篇教程是ios10推送必看篇,感興趣的朋友快來一起學習吧
    2016-09-09

最新評論