UITextField、UITextView限制輸入的方案

一、需求:
1、限制輸入TextField輸入上限為18字(數(shù)字、漢字、英文都按一個(gè)字計(jì)算、表情按2字計(jì)算、等同于string.length);
2、到達(dá)輸入上限后或復(fù)制大段文字后截取前18字;

二、代碼
1、給textField添加監(jiān)聽方法。

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

2、處理textFieldDidChangd:

    NSString *toBeString = textField.text;
    if (![textField markedTextRange]) { //判斷是否輸入完成狀態(tài)
        if (toBeString.length > 18) {
            textField.text = [toBeString ds_subStringLength:kMaxLength];
        }
    }

3、字符串截取的處理,發(fā)現(xiàn)最后一個(gè)字符串是表情時(shí)使用系統(tǒng)方法截取字符串后出現(xiàn)亂碼;自定義了一個(gè)截取字符串的方法;

- (NSString *)ds_subStringLength:(NSUInteger)length{
    NSInteger subLength = 0;
    NSRange range;
    for (int i = 0; i < self.length;i+= range.length) {
        range = [self rangeOfComposedCharacterSequenceAtIndex:i];// 獲取當(dāng)前位置字符的的區(qū)間
        NSString *str = [self substringWithRange:range];
        subLength += range.length;
        if (subLength > length) {
            return [self substringToIndex:i];
        }
    }
    return nil;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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