Textfiled精确限制输入字数

需求:

  • 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精确限制输入字数)