产品的需求:
- 只能输入数字和保留两位小数,设置
keyboardType
为 UIKeyboardTypeDecimalPad
即可
- 可以输入0,继续输入数字则把0抹掉,输入小数点则还可以继续输入两位数字,不能输入多个小数点
基本代码如下
/// <UITextFieldDelegate> 小数点前8位数字 小数点后2位
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *toString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (toString.length > 0) {
NSString *stringRegex = @"(([0]|(0[.]\\d{0,2}))|([1-9]\\d{0,8}(([.]\\d{0,2})?)))?";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];
BOOL flag = [phoneTest evaluateWithObject:toString];
//判断如果第一位输入0 第二位不是小数点的话就把0抹掉
if ([textField.text hasPrefix:@"0"] && textField.text.length == 1 && ![string isEqualToString:@"."]) {
self.moneyInputTextfield.text = [string substringFromIndex:1];
return YES;
}
if (!flag) {
return NO;
}
}
return YES;
}