iOS各问题归类

iOS 输入限制字节数(一个汉字两个字节)

2018-01-23  本文已影响1088人  rockyMJ

一:首先是判断字符串的字节数有两个方法(NSString分类)
oc

#import "NSString+MJCharsCount.h"

@implementation NSString (MJCharsCount)
//得到中英文混合字符串长度 方法1
- (int)convertToInt
{
    int strlength = 0;
    char* p = (char*)[self cStringUsingEncoding:NSUnicodeStringEncoding];
    for (int i=0 ; i<[self lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
        if (*p) {
            p++;
            strlength++;
        }
        else {
            p++;
        }
    }
    return strlength;
}
//得到中英文混合字符串长度 方法2
- (NSInteger)getToInt
{
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSData* da = [self dataUsingEncoding:enc];
    return [da length];
}

二:判断出是汉字输入法,还是其他的输入法
swift

let lang = searchBar.textField.textInputMode?.primaryLanguage
        let selectedRang = searchBar.textField.markedTextRange
        if lang=="zh-Hans" && selectedRang != nil {
// 简体中文输入,包括简体拼音,健体五笔,简体手写
只判断真正输入到textField的
}else{
//其他输入直接判断

oc

if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
        UITextRange *selectedRange = [textField markedTextRange];
        //获取高亮部分
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position) {
            
            if (textField.text != nil) {
//需要是输入超过多少字节之后就输不上
                NSInteger charsCount = [textField.text getToInt];
                if (charsCount > 20) {
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"ExceedConfine" object:nil];
                    NSMutableString *tempStr;
                    NSUInteger count = textField.text.length;
                    do {
                        count = count - 1;
                        tempStr = [textField.text substringToIndex:count].copy;
                    } while ([tempStr getToInt] > 20);
                    textField.text = tempStr.copy;
                }
            }
        }
    }else{
}

三:补充 有时需要是输入超过多少字节之后就输不上
swift

if let str = searchBar.textField.text {
                let charsCount = str.getToInt()
                if charsCount > 20(限制的字节数) {
                    var tempStr = ""
                    var count = str.count
                    repeat {
                        count = count - 1
                        let index = str.index(str.startIndex, offsetBy: count)
                        tempStr = str.substring(to: index)
                    }while tempStr.getToInt() > 20
                    searchBar.textField.text = tempStr
                }
            }
上一篇 下一篇

猜你喜欢

热点阅读