UITextField的keyboardType设置:
UIKeyboardTypeNumberPad没有“.”
UIKeyboardTypeDecimalPad有“.”。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (string.length)
{
unichar single = [string characterAtIndex:0]; // 当前输入的字符
if ((single >= '0' && single <= '9') || single == '.') // 数据正确
{
// 首位不能为小数点
if (!textField.text.length) // 还没有输入,首位
{
if (single == '.')
{
return NO;
}
return YES;
}
else
{
// 不是首位,判断其他
NSRange pointRange = [textField.text rangeOfString:@"."];
if (pointRange.length)
{
// 存在点,小数点之后2位
if (textField.text.length - pointRange.location > 2 || single == '.')
{
return NO;
}
return YES;
}
else
{
// 不存在点
if (![textField.text floatValue])
{
// 等于0,只能输入点
if (single == '.')
{
return YES;
}
return NO;
}
else
{
// 大于0,最大5位数
if (textField.text.length >= 5 && single != '.')
{
return NO;
}
return YES;
}
}
}
}
return NO;
}
return YES;
}