要求: 输入的金额不能超过六位,
小数点后面只能输入两位小数
如果 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];
具体实现方法:
@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]; } }
时间: 2024-10-21 22:22:18