有时候,我们项目中难免会用到textField输入小数的情况,而且规定小数点后最多输入多少位的问题。
下面我来展示一下最多输入两位小数的情况,(这个多少位小数,看需求,我这里讲的是2位小数)
还是直接看代码吧:
textField.keyboardType = UIKeyboardTypeDecimalPad;
// A number pad with a decimal point.苹果给的注释就是一个带小数点的键盘
#pragma mark- UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.keyboardType == UIKeyboardTypeDecimalPad) {
if ([textField.text rangeOfString:@"."].location==NSNotFound) {
isHaveDian=NO;
}
if ([string length]>0)
{
unichar single=[string characterAtIndex:0];//当前输入的字符
if ((single >='0' && single<='9') || single=='.')//数据格式正确
{
//首字母不能为0和小数点
if([textField.text length]==0){
if(single == '.'){
// [self alertView:@"亲,第一个数字不能为小数点"];
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}else if (textField.text.length == 1 && [textField.text isEqualToString:@"0"]){
if (single != '.') {
// [self alertView:@"亲,第一个数字不能为0"];
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
if (single=='.')
{
if(!isHaveDian)//text中还没有小数点
{
isHaveDian=YES;
return YES;
}else
{
// [self alertView:@"亲,您已经输入过小数点了"];
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
else
{
if (isHaveDian)//存在小数点
{
//判断小数点的位数
NSRange ran=[textField.text rangeOfString:@"."];
NSInteger tt=range.location-ran.location;
if (tt <= 2){
return YES;
}else{
// [self alertView:@"亲,您最多输入两位小数"];
return NO;
}
}
else
{
return YES;
}
}
}else{//输入的数据格式不正确
// [self alertView:@"亲,您输入的格式不正确"];
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
else
{
return YES;
}
}
return YES;
}