限制 UITextField 输入的字符长度

- (id)initWithFrame:(CGRect)frame{

    

    self = [super initWithFrame:frame];

    if (self) {

        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)

                                                    name:@"UITextFieldTextDidChangeNotification"

                                                  object:self];

    }

    return self;

}


-(void)textFiledEditChanged:(NSNotification *)obj{


    UITextField *textField = (UITextField *)obj.object;

    NSString *toBeString = textField.text;

    

    NSString *lang = [[textField textInputMode] primaryLanguage]; // 获取当前键盘输入模式

    NSLog(@"%@",lang);

    

    if([lang isEqualToString:@"zh-Hans"]) { //简体中文输入,第三方输入法(搜狗)所有模式下都会显示“zh-Hans”

        UITextRange *selectedRange = [textField markedTextRange];

        //获取高亮部分

        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];

        //没有高亮选择的字,则对已输入的文字进行字数统计和限制

        if(!position) {

            NSString *getStr = [self getSubString:toBeString];

            if(getStr && getStr.length > 0) {

                textField.text = getStr;

            }

        }

    } else{

        NSString *getStr = [self getSubString:toBeString];

        if(getStr && getStr.length > 0) {

            textField.text= getStr;

        }

    }

}


- (NSString *)getSubString:(NSString*)string{

    

    NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

    

    NSData* data = [string dataUsingEncoding:encoding];

    

    NSInteger length = [data length];

    

    if (length > _textNumber) {

        

        NSData *data1 = [data subdataWithRange:NSMakeRange(0, _textNumber)];

        

        NSString *content = [[NSString alloc] initWithData:data1 encoding:encoding];

        

        //当截取kMaxLength长度字符时把中文字符截断返回的content会是nil

        if (!content || content.length == 0) {

            data1 = [data subdataWithRange:NSMakeRange(0, _textNumber - 1)];

            content =  [[NSString alloc] initWithData:data1 encoding:encoding];

        }

        return content;

    }

    return nil;

}




-(void)dealloc{

    

    [[NSNotificationCenter defaultCenter]removeObserver:self

                                                   name:@"UITextFieldTextDidChangeNotification"

                                                 object:self];

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值