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


- (void)textViewDidChange:(UITextView *)textView {
    NSString *lang = [[textView textInputMode] primaryLanguage]; // 鍵盤輸入模式
    if ([lang isEqualToString:@"zh-Hans"]) { // 簡體中文輸入,包括簡體拼音,健體五筆,簡體手寫
        UITextRange *selectedRange = [textView markedTextRange];
        //獲取高亮部分
        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
        // 沒有高亮選擇的字,則對已輸入的文字進行字?jǐn)?shù)統(tǒng)計和限制
        if (!position) {
            if (textView.text.length > self.maxNumber) {
                textView.text = [textView.text substringToIndex:self.maxNumber];
            }
            if (self.inputTextCount) {
                self.inputTextCount(textView.text.length);
            }
        } else {
            // 有高亮選擇的字符串,則暫不對文字進行統(tǒng)計和限制
        }
    } else { // 中文輸入法以外的直接對其統(tǒng)計限制即可,不考慮其他語種情況
        if (textView.text.length > self.maxNumber) {
            textView.text = [textView.text substringToIndex:self.maxNumber];
        }
        if (self.inputTextCount) {
            self.inputTextCount(textView.text.length);
        }
    }
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([self isText:textView beyondLimit:self.maxNumber] && [text length] > 0) {
        return NO;
    }
    return YES;
}

- (BOOL)isText:(UITextView *)tv beyondLimit:(int)maxLimit{
    NSString *lang = [[tv textInputMode] primaryLanguage];
    if ([lang isEqualToString:@"zh-Hans"]) {
        UITextRange *selectedRange = [tv markedTextRange];
        UITextPosition *position = [tv positionFromPosition:selectedRange.start offset:0];
        if (!position) {
            if (tv.text.length > maxLimit) {
                return YES;
            }
        }
    } else {
        if (tv.text.length > maxLimit) {
            return YES;
        }
    }
    
    return NO;
}



行數(shù)限制

- (void)textViewDidChange:(UITextView *)textView {
    if (self.numberOfLines != NSIntegerMax && !_isDelete) {
        float limitHeight = self.font.lineHeight * self.numberOfLines ;
        if ([self getTextContentSize].height > limitHeight) {
            while ([self getTextContentSize].height > limitHeight) {
                self.text = [self.text substringToIndex:self.text.length - 1];
            }
        }
    }
}

- (CGSize)getTextContentSize {
    return [self getStringPlaceSize:self.text textFont:self.font bundingSize:CGSizeMake(self.contentSize.width-10, CGFLOAT_MAX)];
}
- (CGSize)getStringPlaceSize:(NSString *)string textFont:(UIFont *)font bundingSize:(CGSize)boundSize {
    //計算文本高度
    NSDictionary *attribute = @{NSFontAttributeName:font};
    NSStringDrawingOptions option = (NSStringDrawingOptions)(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading);
    CGSize size = [string boundingRectWithSize:boundSize options:option attributes:attribute context:nil].size;
    return size;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([self isText:textView beyondLimit:self.maxNumber] && [text length] > 0) {
        return NO;
    }
    self.isDelete = text.length == 0;
    return YES;
}



最后編輯于
?著作權(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)容