美文网首页
iOS开发,UITextField输入中文字符长度限制的问题

iOS开发,UITextField输入中文字符长度限制的问题

作者: 有O梦想的咸鱼 | 来源:发表于2019-05-23 10:48 被阅读0次

    最近做项目有要求对输入昵称做字数限制,其中出现的问题记录一下:
    刚开始是这么写的:

    注册通知:
     [NotificationCenter addObserver:self selector:@selector(textFieldTextDidChange:) name:UITextFieldTextDidChangeNotification object:nil];
    - (void)textFieldTextDidChange:(NSNotification *)notification {
      if (self.textfield.text.length) {
            self.saveButtonItem.enabled = YES;
        }else {
            self.saveButtonItem.enabled = NO;
        }
    }
    在代理方法:
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
            NSString *name = textField.text;
            if (name.length > 20) {
                return NO;
            } else {
                return YES;
            }
    }
    

    这样写有2个问题:
    1.需要正好输入限定的长度时才有用,一次性拼音拼出来的字超过固定长度时也会显示在textField上。
    2.剩余1个字的时候拼音写完一个字符就不行了,因为拼写的拼音就是textField的内容,这样就导致比如你想输入我”,结果输入w的时候就已经到限制长度了。
    所以最后这样写:

    - (void)textFieldTextDidChange:(NSNotification *)noti {
        if (self.textfield.text.length) {
            self.saveButtonItem.enabled = YES;
        }else {
            self.saveButtonItem.enabled = NO;
        }
        NSString *language = [[[UITextInputMode activeInputModes] firstObject] primaryLanguage];
        NSString *name = self.textfield.text;
        if ([language isEqualToString:@"zh-Hans"]) {
            UITextRange *range = [self.textfield markedTextRange];
            UITextPosition *start = range.start;
            UITextPosition *end = range.end;
            NSInteger selLength = [self.textfield offsetFromPosition:start toPosition:end];
            NSInteger contentLength = self.textfield.text.length - selLength;
            if (contentLength > 20) {
                self.textfield.text = [self.textfield.text substringToIndex:20];
            }
        }else {
            if (name.length > 20) {
                 self.textfield.text = [self.textfield.text substringToIndex:20];
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:iOS开发,UITextField输入中文字符长度限制的问题

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