- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
这个函数在UITextfield有输入的时候被调用,如果返回YES则对UITextfield中的字符串进行改变,反之则不改变。因此在这个函数内可以根据需要return YES 或者NO。
下面这个例子可以让UITextfield只能输入0.52, 1.23这样的数字。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *characterSet=[[NSCharacterSet characterSetWithCharactersInString:@"-.1234567890"]invertedSet];
NSString *filteredResult=[[string componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@""];
if (![string isEqualToString:filteredResult])
{
return NO;
}
static BOOL containsDecPoint;
if ([textField.text rangeOfString:@"."].location==NSNotFound)
{
containsDecPoint=NO;
}
if (string.length>0)
{
unichar single=[string characterAtIndex:0];
if(textField.text.length==0)
{
if (single=='.')
{
return NO;
}
}
else
{
if(single=='.')
{
if (!containsDecPoint)
{
containsDecPoint=YES;
}
else
{
return NO;
}
}
if(single=='-')
{
return NO;
}
}
}
return YES;
}