Ios 如何在textfield中只接受一个小数点值?
我有一个Ios 如何在textfield中只接受一个小数点值?,ios,objective-c,xcode,Ios,Objective C,Xcode,我有一个UITextField的实例。我的键盘类型是数字键盘,所以用户只能输入十进制值。但我可以将值输入为2.4.5.5。请说明如何限制用户仅输入2.4之类的值。请尝试以下操作: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([textField.text contains
UITextField
的实例。我的键盘类型是数字键盘,所以用户只能输入十进制值。但我可以将值输入为2.4.5.5。请说明如何限制用户仅输入2.4之类的值。请尝试以下操作:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text containsString:@"."] && [string containsString:@"."]) {
return NO;
} else {
return YES;
}
}
我创建了一个示例项目,并进行了尝试。我得到了确切的解决方案。请检查下面的答案
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *charSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
if ([string rangeOfCharacterFromSet:charSet].location != NSNotFound)
return NO;
else {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSArray *arrSep = [newString componentsSeparatedByString:@"."];
if([arrSep count] > 2)
return NO;
else {
if([arrSep count] == 1) {
if([[arrSep objectAtIndex:0] length] > 9)
return NO;
else
return YES;
}
if([arrSep count] == 2) {
if([[arrSep objectAtIndex:0] length] > 9)
return NO;
else if([[arrSep objectAtIndex:1] length] > 2) //Set after dot(.) how many digits you want.I set after dot I want 2 digits.If it goes more than 2 return NO
return NO;
else {
if([[arrSep objectAtIndex:0] length] >= 10) //Again I set the condition here.
return NO;
else
return YES;
}
}
return YES;
}
}
return YES;
}
输出
首先,我根据条件输入带点的9位数字
然后我输入你的输入2.4。如果我试图给另一个点,它不允许
使用这个(它对我有用):
这意味着不应允许任何dot。2017年,我们仍在执行目标C??斯威夫特4号已经出局了,不是吗?
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *numbersOnly = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:string];
BOOL isNumbersOnly = ([numbersOnly isSupersetOfSet:characterSetFromTextField]);
if (!isNumbersOnly) {
return NO;
}
if ([string rangeOfString:@"."].location !=NSNotFound && [textField.text rangeOfString:string].location !=NSNotFound) {
return NO;
}
return YES;
}