美文网首页iOS的路上
输入框限制输入的汉字,字母的个数

输入框限制输入的汉字,字母的个数

作者: 在学习的路上 | 来源:发表于2017-04-25 14:37 被阅读109次

    前言

    最近在做一个项目,其中要求所有可以输入的输入框都要限制长度,一共要求是12个字符,就是说中文最多只能输入6个,英文,数字可以输入12个。因为之前没有接触过这个,所以在网上查了很多代码片段,按照方法实现之后,发现第一个问题,就是英文,数字,汉字都可以输入12个,明显是不对的,后来找到个新的方法,但是如果你要是使用键盘的联想输入的时候,会发现控制不了长度了,或者当输入一连串的话的时候,但是发现只剩一个字节的时候,会打不出来,所以我开始研究如何控制这个地方。


    代码

    1.首先注册通知

    //注册通知,textfield内容改变调用

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.tf];

    2.在通知方法中控制

    //通知

    - (void)textFieldDidChange:(NSNotification *)note

    {

    UITextRange *selectedRange = [_tf markedTextRange];

    //获取高亮部分

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

    //    NSLog(@"%@", position);

    if (!position) {

    //获取文本框内容的字节数

    int bytes = [self stringConvertToInt:self.tf.text];

    //设置不能超过12个字节,因为不能有半个汉字,所以以字符串长度为单位。

    if (bytes > 6)

    {

    //超出字节数,还是原来的内容

    self.tf.text = self.lastTextContent;

    }

    else

    {

    self.lastTextContent = self.tf.text;

    }

    }else {

    }

    }

    3./**

    *  得到字节数

    *

    *  @param strtemp 要获取字节的字符串

    *

    *  @return 返回字节数+1的一半,因为不会有半个汉字

    */

    -  (int)stringConvertToInt:(NSString*)strtemp

    {

    int strlength = 0;

    char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];

    for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {

    if (*p) {

    p++;

    strlength++;

    }

    else {

    p++;

    }

    }

    return (strlength+1)/2;

    }

    4.在textfiled的代理方法中,将textfile的原来的内容放在textfiled中

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

    {

    self.lastTextContent = _firstTf.text;

    return YES;

    }

    获取高亮的部分 就是避免输入一串汉字的时候,不能输入。 参考的别人的代码,自己做了一下修改。实现了自己的需求,有什么错误,希望大家指正。

    相关文章

      网友评论

        本文标题:输入框限制输入的汉字,字母的个数

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