iOS 限制 textFiled输入 长度 (我输入的的是电话号)

不 走 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string方法

  • (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    { //string就是此时输入的那个字符 textField就是此时正在输入的那个输入框 返回YES就是可以改变输入框的值 NO相反

    if ([string isEqualToString:@"\n"]) //按会车可以改变
    {
    return YES;
    }

    NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到输入框的内容

    if (self.textFieldY == textField) //判断是否时我们想要限定的那个输入框
    {
    if ([toBeString length] > 1) { //如果输入框内容大于20则弹出警告
    textField.text = [toBeString substringToIndex:20];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"超过最大字数不能输入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [alert show];
    return NO;
    }
    }
    return YES;
    }
    求大神 解答

不走代理的话 可能的原因是你没有设置textfiled的代理,若果用xib或者stotyboard 记得代理连线

有例子设置 text风格

这里有个自己写的demo,可以参考一下

 - (IBAction)onTextFieldEditingChanged:(id)sender {
    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
    NSRange range = NSMakeRange(0, Max_Character_Num);
    if ([lang isEqualToString:@"zh-Hans"]) {//如果输入的时中文
        UITextRange *selectedRange = [self.tagNameTextField markedTextRange];
        UITextPosition *position = [self.tagNameTextField positionFromPosition:selectedRange.start offset:0];
        if (!position) {
            if (self.tagNameTextField.text.length > Max_Character_Num) {
//                self.tagNameTextField.text = [self.tagNameTextField.text substringFrom:0 to:Max_Character_Num];

                self.tagNameTextField.text = [self.tagNameTextField.text substringWithRange:range];
            }
        }
    }else{
        if (self.tagNameTextField.text.length > Max_Character_Num) {
            self.tagNameTextField.text = [self.tagNameTextField.text substringWithRange:range];
        }
    }
}

找一下你代理设置的问题。

  • (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string // return NO to not change text
    {
    //判断是否超过 ACCOUNT_MAX_CHARS 个字符,注意要判断当string.leng>0
    //的情况才行,如果是删除的时候,string.length==0
    int length = textField.text.length;
    if (length >= ACCOUNT_MAX_CHARS && string.length >0)
    {
    return NO;
    }

    // 判断输入的是否为数字 (只能输入数字)

    NSString validRegEx =@"^[0-9]$";

    NSPredicate *regExPredicate =[NSPredicate predicateWithFormat:@"SELF MATCHES %@", validRegEx];

    BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject:string];

    if (myStringMatchesRegEx)

    return YES;
    

    else

    return NO;
    

    }

主要看看 你加没加代理 加了代理 一般出现代理不启动 就是出现冲突 delegate的地址为nil

输入电话号码即都是数字,但不知道有没有位数限制(因为不知道有没有区分固定电话号码和手机号码)
// 委托方法回调

  • (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
    if ([string isEqualToString:@"\n"])
    {
    return NO;
    }

    NSString *tempStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
    BOOL boolValue = [self limitInputString:tempStr];
    return boolValue;
    }

// 限制方法

  • (BOOL)limitInputString:(NSString *)aString
    {
    // 限制只能输入数字
    NSCharacterSet *numberSet = [NSCharacterSet characterSetWithCharactersInString:@“0123456789"];

    NSString *tempStr = aString;
    // 但可以输入数字
    NSRange numberRange = [tempStr rangeOfCharacterFromSet:numberSet];
    if (numberRange.location == NSNotFound)
    {
    return NO;
    }

    return YES;
    }