[RedRain筆記] -限制TextView輸入文字的長度

RedRain的簡書:http://www.itdecent.cn/users/29e03e6ff407/latest_articles

有時需要輸入限定長度的文字?jǐn)?shù)量.但是由于鍵盤的聯(lián)想和粘貼會造成字?jǐn)?shù)超出規(guī)定數(shù).

在TextView中的代理方法處理一下超出的文字.就可以達(dá)到效果.


static NSInteger const kText_Length_MAX = 20;

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)atext{

if ((textView.text.length - range.length + atext.length) > kText_Length_MAX)

{

// 超出范圍的文字, 截斷到規(guī)定長度, 粘貼出現(xiàn)超出文字.
        NSString *tempString = [NSString stringWithFormat:@"%@%@",textView.text,atext];
        textView.text = tempString;
        
        
        NSString * lastStr =[tempString substringWithRange:NSMakeRange(kText_Length_MAX, 1)];

        // 如果這個字符是emoji的一部分,即無效的字符,那么這個就是nil
        if(lastStr.UTF8String == nil){
            
            NSInteger offset = tempString.length - kText_Length_MAX;
            NSInteger length = offset > 0 ? offset : 0;
            
            NSRange range = NSMakeRange(kText_Length_MAX+1  , length);
            textView.selectedRange = range;
            [textView insertText:@""];
            
        }else{
            NSString *substring = [tempString substringToIndex:kText_Length_MAX];
            textView.text = [substring copy];
        }
        return NO;
}

return YES;

}

//焦點發(fā)生改變
- (void)textViewDidChangeSelection:(UITextView *)textView {

    if (textView.text.length> kText_Length_MAX) {
        // 超出范圍的文字, 截斷到規(guī)定長度

        NSString * lastStr =[textView.text substringWithRange:NSMakeRange(kText_Length_MAX, 1)];

        // 如果這個字符是emoji的一部分,即無效的字符,那么這個就是nil
        if(lastStr.UTF8String == nil){
            // 此處截斷,為了杜絕掉多次deleteBackward的重復(fù)循環(huán),減少執(zhí)行效率.
            NSString *substring = [textView.text substringToIndex:kText_Length_MAX + 1];
            textView.text = [substring copy];
            [textView deleteBackward];
        }
        
        
        // 上面刪除一次, 如果還是超出, 再截斷一次, 這里就不會有emoji了.
        if (textView.text.length> kText_Length_MAX) {
            
            NSString *substring = [textView.text substringToIndex:kText_Length_MAX];
            textView.text = [substring copy];
        }

    }

}

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

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

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