TextFiled 中输入金额

要求: 输入的金额不能超过六位,

   小数点后面只能输入两位小数

   如果 textFIled  中第一位输入的是0 ,后面必须输入小数点,否则禁止输入

用到 textfiled代理方法

#pragma mark ---- textFiledDelegate ----

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  

//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。  

//这对于想要加入撤销选项的应用程序特别有用  

//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。     

//要防止文字被改变可以返回NO  

//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中  

     return YES;  

}  

给 textFiled 添加一个监听方法,监听 textFiled 的输入

    [self.moneyTF addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

具体实现方法:

[![复制代码](http://upload-images.jianshu.io/upload_images/10024011-f0f9155cb67c7542.gif?imageMogr2/auto-orient/strip)](javascript:void(0); "复制代码") 

@property (nonatomic, strong) NSString *max; // 默认99999.99
 _max = @"99999.99";//设置一个最大值

#pragma mark ---- textFiledDelegate ----
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    _tempText = textField.text;
    _tempRange = range;
    _tempString = string; if (string && string.length > 0) { // 输入
        if (_tempText.length == 0) { if ([string isEqualToString:@"."]) {
                _tempText = @"0"; return YES;
            }else{ return YES;
            }

        }else if (_tempText.length == 1){ if ([_tempText isEqualToString:@"0"]) { if ([string isEqualToString:@"."]) { return YES;
                }else{ return NO;
                }
            }
        } // 输入后不可超过 '99999.99'
        if ([_tempText stringByAppendingString:string].floatValue > [_max floatValue]) { return NO;
        } // 不可超过8位
        if (_tempText.length >= _max.length) { return NO;
        }

        NSRange docRange = [_tempText rangeOfString:@"."]; if (docRange.location != NSNotFound) { // 已输入小数点, 禁止再输入小数点
            if ([string isEqualToString:@"."]) { return NO;
            } // 小数点后位数
            NSUInteger decimals = _tempText.length - (docRange.location + docRange.length); if (decimals == 2) { // 小数点后两位,禁止输入任何字符
                return NO;
            }else if (decimals == 1){ // 小数点后一位,禁止输入 '0'
                if ([string isEqualToString:@"0"]) { return NO;
                }
            }
        }else{ if (_tempText.length == 0) { // 第一位
                if ([string isEqualToString:@"."] || [string isEqualToString:@"0"]) { return NO;
                }
            }
        }
    } return YES;
} -(void)textFieldDidChange :(UITextField *)theTextField{

    NSRange docRange = [_tempText rangeOfString:@"."]; if (_tempString &&_tempString.length > 0) { //* 输入 */
        if (docRange.location != NSNotFound) { //有小数点
            theTextField.text = [NSString stringWithFormat:@"%@%@",_tempText,_tempString];
        }else { if ([_tempString isEqualToString:@"."]) { //是小数点
                theTextField.text = [NSString stringWithFormat:@"%@%@",_tempText,_tempString];
            }else { //不是小数点
                theTextField.text = [NSString stringWithFormat:@"%ld",_tempText.integerValue * 10 + _tempString.integerValue];
            }
        }
    }else { //删除
        theTextField.text = [_tempText substringToIndex:_tempText.length -1];
    }

}

你可能感兴趣的:(TextFiled 中输入金额)