UITextField限制字?jǐn)?shù)

來自# 小熊翻譯 # App的解讀:

背景: UITextField在中文九宮格鍵盤下會(huì)出現(xiàn)輸入空格,具體代碼如下


swift 4.2版本

    textField.addTarget(self, action: #selector(AddTagAlertView.textFieldChanged(textField:)), for: .editingChanged);

    @objc func textFieldChanged(textField:UITextField){
        let kMaxCount: Int = 8
        guard let text = textField.text else {
            return
        }
        // 高亮狀態(tài)不計(jì)算長(zhǎng)度
        if let selectedRange = textField.markedTextRange, let _: UITextPosition = textField.position(from: selectedRange.start, offset: 0) {
            return
        }
        else {
            if (text.count > kMaxCount) {
                textField.text = String(text.prefix(kMaxCount))
                MBProgressHUD.toast("最多輸入8個(gè)字符", false)
            }
        }
    }

OC版本:

[_textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

- (void)textFieldDidChange:(UITextField *)textField {
   CGFloat kMaxCount = 8;
    UITextRange *selectedRange = textField.markedTextRange;
    UITextPosition *textPosition = [textField positionFromPosition:selectedRange.start offset:0];
    if (selectedRange && textPosition) {
        return;
    }
    else {
        if (textField.text.length > kMaxCount) {
            textField.text = [textField.text substringToIndex: kMaxCount-1];
            [MBProgressHUD toast:[NSString stringWithFormat:@"最多輸入%d個(gè)字符", kMaxCount] :NO];
        }
    }
}


分析原因:
我們可以轉(zhuǎn)換成utf8分析原因: 中文九宮格高亮狀態(tài)會(huì)產(chǎn)生空格
textLength就是我們實(shí)際需要的字符串長(zhǎng)度,但是九宮格狀態(tài)輸入時(shí)會(huì)出現(xiàn)空格,utf8是 -30,-128,-122,我們把這些過濾之后就得到了實(shí)際長(zhǎng)度,但是實(shí)際限制長(zhǎng)度的時(shí)候還是按照上面的方法進(jìn)行

// 下面這段代碼僅用于問題分析

        var textLength = text_result.count
        let str = textField.text?.cString(using: .utf8)
        print("str === \(String(describing: str)), \(String(describing: str?.count))")
        var list = [CChar]()
        if let charList = str {
            for char in charList {
                print("char == \(char)")
                // 中文狀態(tài)下輸入空格會(huì)出現(xiàn) -30,-128,-122,要排除utf8為 -30,-128,-122 的影響,再計(jì)算長(zhǎng)度
                if char != -30 && char != -128 && char != -122 {
                    list.append(char)
                }
            }
            textLength = list.count
        }
最后編輯于
?著作權(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)容