- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (string.length == 0) {
return YES;
}
///格式化
dispatch_block_t formatTextFieldText = ^{
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:textField.text];
if (!isnan(decimalNumber.doubleValue)) {
textField.text = decimalNumber.stringValue;
}
};
NSString *generatedString = [textField.text stringByReplacingCharactersInRange:range withString:string];
///长度不超过10
if (generatedString.length > 10) {
return NO;
}
///小数点的个数
NSUInteger numberOfDots = generatedString.length - [[generatedString componentsSeparatedByString:@"."] componentsJoinedByString:@""].length;
///不能超过1个小数点
if (numberOfDots > 1) {
formatTextFieldText();
return NO;
}
///小数点后只能有两位
if (numberOfDots == 1 && [generatedString componentsSeparatedByString:@"."].lastObject.length > 2) {
formatTextFieldText();
return NO;
}
///只能输入数字或小数点
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."].invertedSet;
if (![string isEqualToString:[[string componentsSeparatedByCharactersInSet:set] componentsJoinedByString:@""]]) {
formatTextFieldText();
return NO;
}
return YES;
}