验证文本字段后的问题

时间:2011-02-09 14:47:08

标签: iphone

我需要验证在.之后允许两位数的文本字段输入。 例如:如果我输入2.333它不会允许,如果只能允许2.33。

为此我使用此代码

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSArray *sep = [textField.text componentsSeparatedByString:@"."];
    if([sep count]==2)
    {
        NSString *sepStr=[NSString stringWithFormat:@"%@",[sep objectAtIndex:1]];
        return !([sepStr length]=2);
    }
}

如果我使用return !([sepStr length]=2)它可以正常工作,不会允许输入下一个值。

但如果我删除了值,文本字段也不允许任何修改。 我的意思是没有用户互动。 它无法编辑。 谁能帮帮我吗。 我怎么能纠正这个。 提前谢谢你。

2 个答案:

答案 0 :(得分:2)

Thomas Clayson的代码问题在于,当用户键入例如:“1234”并且之后插入“。”时,用户仍然无法再编辑文本字段。在1和2之间,或者如果他在文本字段中粘贴一个数字。

这是一个更好的解决方案:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSArray *sep = [newString componentsSeparatedByString:@"."];
    if([sep count]>=2)
    {
        NSString *sepStr=[NSString stringWithFormat:@"%@",[sep objectAtIndex:1]];
        return !([sepStr length]>2);
    }
    return YES;
}

答案 1 :(得分:0)

您的问题可能是您没有评估回报。您只有一个=,而是设置值而不是评估表达式。这将始终导致函数在您的情况下返回false。

无论如何,这是我的编辑:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSArray *sep = [textField.text componentsSeparatedByString:@"."];
    if([sep count]==2)
    {
        NSString *sepStr=[NSString stringWithFormat:@"%@%@",[sep objectAtIndex:1],replacementString];
        return !([sepStr length]>2);
    }
}

我所做的更改是将(NSString *)string添加到textField的当前文本值,然后进行测试以查看它是否更多超过2个字符。