textfield限制输入字符

记录一下限制输入字符的判断。不仅局限于中文或英文

  • 首先在ViewDidLoad中注册通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFieldEditChanged:)
    name:@"UITextFieldTextDidChangeNotification" object:self.userTF];
  • 下面是判断逻辑 由于需求有中文键盘下的字母数字输入,所以其中那部分判断如不需要可以去除
// 输入字符判断
-(void)textFieldEditChanged:(NSNotification *)obj {
    UITextField *textField = (UITextField *)obj.object;
    NSString *toBeString = textField.text;
    NSString *lang = [textField.textInputMode primaryLanguage];
    if ([lang isEqualToString:@"zh-Hans"])// 简体中文输入
        {
        //获取高亮部分
        UITextRange *selectedRange = [textField markedTextRange];
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
     
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        
        if (!position || !selectedRange)
        {
            if (toBeString.length > MAX_CHINESE_LENGTH)
            {
                NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_CHINESE_LENGTH];
                if (rangeIndex.length == 1)
                {
                    
                    textField.text = [toBeString substringToIndex:MAX_CHINESE_LENGTH];
                }
                else
                {
                    NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_CHINESE_LENGTH)];
                    textField.text = [toBeString substringWithRange:rangeRange];
                }
            }
            if (toBeString.length > MAX_ENGLISH_LENGTH)
            {
                NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_ENGLISH_LENGTH];
                if (rangeIndex.length == 1)
                {
                    textField.text = [toBeString substringToIndex:MAX_ENGLISH_LENGTH];
                }
                else
                {
                    NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_ENGLISH_LENGTH)];
                    textField.text = [toBeString substringWithRange:rangeRange];
                }
            }
        } 
    }
        // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        else
        {
            if (toBeString.length > MAX_ENGLISH_LENGTH)
                {
                    NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_ENGLISH_LENGTH];
                    if (rangeIndex.length == 1)
                    {
                        textField.text = [toBeString substringToIndex:MAX_ENGLISH_LENGTH];
                    }
                    else
                    {
                NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_ENGLISH_LENGTH)];
                textField.text = [toBeString substringWithRange:rangeRange];
                    }
                }
            }
        } 

附上我的博客链接:oragekk'Blog 欢迎留言-不过评论系统换成了disqus需要搭梯子哦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容