代码功能:spa
//0.priceTextFiled.keyboardType = UIKeyboardTypeDecimalPad;//必须code
//1.限制priceTextFiled只容许输入正确的数额 好比 0 123 123. 123.0 123.12,不合法的: 00 0.1.23 将被过滤blog
//2.使用这种限制方法时,TextField不能容许移动光标(即:光标能且只能在最末尾),不能容许用户使用粘贴进行输入ci
//3.能够在TextField上盖一层透明Button来达到2的要求string
keycode:it
[priceTextFiled.rac_textSignal subscribeNext:^(NSString *x) { static NSInteger const maxIntegerLength=8;//最大整数位 static NSInteger const maxFloatLength=2;//最大精确到小数位 if (x.length) { //第一个字符处理 //第一个字符为0,且长度>1时 if ([[x substringWithRange:NSMakeRange(0, 1)] isEqualToString:@"0"]) { if (x.length>1) { if ([[x substringWithRange:NSMakeRange(1, 1)] isEqualToString:@"0"]) { //若是第二个字符仍是0,即"00",则无效,改成"0" priceTextFiled.text=@"0"; }else if (![[x substringWithRange:NSMakeRange(1, 1)] isEqualToString:@"."]){ //若是第二个字符不是".",好比"03",清除首位的"0" priceTextFiled.text=[x substringFromIndex:1]; } } } //第一个字符为"."时,改成"0." else if ([[x substringWithRange:NSMakeRange(0, 1)] isEqualToString:@"."]){ priceTextFiled.text=@"0."; } //2个以上字符的处理 NSRange pointRange = [x rangeOfString:@"."]; NSRange pointsRange = [x rangeOfString:@".."]; if (pointsRange.length>0) { //含有2个小数点 priceTextFiled.text=[x substringToIndex:x.length-1]; } else if (pointRange.length>0){ //含有1个小数点时,而且已经输入了数字,则不能再次输入小数点 if ((pointRange.location!=x.length-1) && ([[x substringFromIndex:x.length-1]isEqualToString:@"."])) { priceTextFiled.text=[x substringToIndex:x.length-1]; } if (pointRange.location+maxFloatLength<x.length) { //输入位数超出精确度限制,进行截取 priceTextFiled.text=[x substringToIndex:pointRange.location+maxFloatLength+1]; } } else{ if (x.length>maxIntegerLength) { priceTextFiled.text=[x substringToIndex:maxIntegerLength]; } } } }];