美文网首页
Textfiled精确限制输入字数

Textfiled精确限制输入字数

作者: Dannn_Y | 来源:发表于2016-09-06 16:27 被阅读40次

    需求:

    • textfield中限制输入字数,不管是中文还是英文,或者中英文混合,总数限制15个,对输入的汉字或英文字符都要求很精确,尝试了好几种办法,如果只输入中文,或者只输入英文,用普通的完全没有问题,但是如果是中英文混合,就计算不准了。
      上网搜了下面的这种办法,实践之后完全没有问题,在此记录一下,忘记原文在哪看的了,如有侵权请联系我。

    • 首先在viewDidload中添加下面的通知,监听textfield编辑时的变化

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:) name:UITextFieldTextDidChangeNotification object:textFields];
    
    • 实现textfield编辑的时候调用的方法,当达到最大限制之后,之后输入的文字就不显示,只截取需要的数量。
    
    - (void)textFiledEditChanged:(NSNotification *)notification {
        
        UITextField *textFieldtest = (UITextField *)notification.object;
        NSString *toBeString = textFieldtest.text;
        NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
        if([lang isEqualToString:@"zh-Hans"]) { //简体中文输入,包括简体拼音,健体五笔,简体手写
                UITextRange *selectedRange = [textFieldtest markedTextRange];
                //获取高亮部分
                UITextPosition *position = [textFieldtest positionFromPosition:selectedRange.start offset:0];
                //没有高亮选择的字,则对已输入的文字进行字数统计和限制
                if(!position) {
                    if(toBeString.length > 15) {
                        textFieldtest.text = [toBeString substringToIndex:15];
                    }
                }
           }
          else if ([lang isEqualToString:@"en-US"]) {
                
                UITextRange *selectedRange = [textFieldtest markedTextRange];
                UITextPosition *position = [textFieldtest positionFromPosition:selectedRange.start offset:0];
                
                if(!position) {
                    if(toBeString.length > 32) {
                        textFieldtest.text = [toBeString substringToIndex:32];
                    }
                }
            }
            
            text2 = textFieldtest.text;
    }
    
    • 最后别忘了在dealloc 中移除通知。
    - (void)dealloc {
        
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:textFields];
    }
    

    相关文章

      网友评论

          本文标题:Textfiled精确限制输入字数

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