美文网首页
关于 UITextField 限制输入字符

关于 UITextField 限制输入字符

作者: ME进哥哥 | 来源:发表于2019-02-21 17:26 被阅读0次

    在日常开发中,难免会遇到UITextField限制输入字符长度的需求,比如:输入手机号时要求只能输入11位,所以简单记录一下。

    • 方法一
      遵守UITextField协议,并实现其代理方法
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        if (textField == self.mobileTextField) {
            //输入字符的长度
            NSInteger length = textField.text.length - range.length + string.length;
            if (length > 11) {
                return NO;
            }
        }
        return YES;
    }
    

    该方法有个缺点,只适合输入英文、数字等字符。输入中文时可能最后一个字符会出现无法输入的情况。所以此时可以使用方法二去解决

    • 方法二
      该方法是添加一个像UIButton点击事件一样的事件,去监听UITextField的字符输入,当然也可以使用通知去进行监听,原理是一样的。给UITextField添加一个事件:
    [self.nameTextField addTarget:self action:@selector(TextFieldDidChanged:) forControlEvents:UIControlEventEditingChanged];
    

    实现方法TextFieldDidChanged

    - (void)TextFieldDidChanged:(UITextField *)textField
    {
        //需要限制的长度
        NSInteger maxLength = 4;
        //输入的内容
        NSString *contentText = textField.text;
        //获取高亮内容的范围
        UITextRange *maskedRange = [textField markedTextRange];
        //计算高亮内容的长度
        NSInteger maskedTextLength = [textField offsetFromPosition:maskedRange.start toPosition:maskedRange.end];
        //没有高亮内容时,对已输入的文字进行操作
        if (!maskedTextLength) {
            //如果输入的内容长度大于限制的内容长度
            if (contentText.length > maxLength) {
                //截断长度限制以后的字符,避免截断字符
                NSRange range = [contentText rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)];
                textField.text = [contentText substringWithRange:range];
            }
        }
    }
    

    重点提一下方法

    - (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range
    {
    //此方法用于在字符串的一个range范围内,返回此range范围内完整的字符串的range
    }
    

    使用此方法可以避免截断完整字符,比如你输入一个Emoji的时候,如果直接使用substringToIndex去进行截取的话,可能会把Emoji截断而出现乱码的情况

    相关文章

      网友评论

          本文标题:关于 UITextField 限制输入字符

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