Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在textfield中只接受一个小数点值?_Ios_Objective C_Xcode - Fatal编程技术网

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;
    }