美文网首页iOS各问题归类
iOS 输入限制字节数(一个汉字两个字节)

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

作者: rockyMJ | 来源:发表于2018-01-23 15:54 被阅读1088次

    一:首先是判断字符串的字节数有两个方法(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
                    }
                }
    

    相关文章

      网友评论

        本文标题:iOS 输入限制字节数(一个汉字两个字节)

        本文链接:https://www.haomeiwen.com/subject/ptbsaxtx.html