UITextField 中文輸入狀態(tài)下 截取字符串 bug問題

需求:UItextField 輸入的時(shí)候既可以輸入中文也可以輸入英文,也有字?jǐn)?shù)限制。
所以采用下面代碼進(jìn)行監(jiān)聽字符串變化

[textField addTarget:self action:@selector(textValueChanged:) forControlEvents:UIControlEventEditingChanged];

-(void)textValueChanged:(UITextField *)textField
{
        if (textField.text.length>8) {
             textField.text=[textField.text substringWithRange:NSMakeRange(0, 8)];
         }
}

這種方式有個(gè)問題在中文輸入法的時(shí)候,因?yàn)橹形妮斎敕ㄓ新?lián)想功能,所以在聯(lián)想的框里字符串已經(jīng)超過限制的情況下就會(huì)出現(xiàn)bug:連續(xù)輸入中文的時(shí)候,當(dāng)聯(lián)想欄里的中文長度超過字符串限制的時(shí)候就會(huì)由正在編輯中變?yōu)榻Y(jié)束編輯且因?yàn)殚g隔特別大。如下圖

Paste_Image.png
Paste_Image.png

解決方案就是在截取字符串的時(shí)候?qū)κ欠窬庉嬛泻彤?dāng)前的輸入法作出判斷

-(void)textValueChanged:(UITextField *)textField
{
 NSString *lang = [[UITextInputMode currentInputMode]primaryLanguage];//鍵盤輸入模式
        if ([lang isEqualToString:@"zh-Hans"]) {// 簡(jiǎn)體中文輸入,包括簡(jiǎn)體拼音,健體五筆,簡(jiǎn)體手寫
            UITextRange *selectedRange = [textField markedTextRange];
            //獲取高亮部分
            UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
            //沒有高亮選擇的字,則對(duì)已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
            if (!position) {
                textField.text= [self filterCharactor:textField.text withRegex:@"[^\u4e00-\u9fa5·|?]"];

                if (textField.text.length>8) {
                    textField.text=[textField.text substringWithRange:NSMakeRange(0, 8)];
                }
            }
            //有高亮選擇的字符串,則暫不對(duì)文字進(jìn)行統(tǒng)計(jì)和限制
            else{
                
            }
        }
        // 中文輸入法以外的直接對(duì)其統(tǒng)計(jì)限制即可,不考慮其他語種情況
        else{
            textField.text= [self filterCharactor:textField.text withRegex:@"[^\u4e00-\u9fa5·|?]"];

            if (textField.text.length>8) {
                textField.text=[textField.text substringWithRange:NSMakeRange(0, 8)];
            }
        }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容