自动在日期字段中插入'/'

时间:2015-06-19 09:51:39

标签: ios objective-c

我有一个格式为uitextfield:DD / MM / YYYY,例如:12/03/1982 我想当用户输入“2”和“3”时,此字段将自动插入“/”后面。我用方法执行了这个:

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

带支票:

NSString *wholeTextName =
[textField.text stringByReplacingCharactersInRange:range
                                        withString:string];
LogDebug(@"WholeText: %@", wholeTextName);


    if ([textField isEqual:self.dateOfBirthTextField])
    {
        if (([wholeTextName length] == 2)||(([wholeTextName length] == 5))) {
        textField.text=[wholeTextName stringByAppendingString:@"/"];
        }

但是当我输入'2'时,结果出现在这个文本字段中: '12 / 2'不是'12 /'=预期结果 你能告诉我吗?

2 个答案:

答案 0 :(得分:1)

使用以下代码实现所需的结果或文本字段验证。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *wholeString = textField.text;
    if ((wholeString.length == 2 || wholeString.length == 5) && ![string isEqualToString:@""])
    {
       wholeString = [wholeString stringByAppendingString:@"/"];
       textField.text = wholeString;
    }
    else if(wholeString.length == 10 && ![string isEqualToString:@""])
    {
       return NO;
    }

    return YES;
}

这里我添加了一个else if条件来限制超过10个字符和一个条件![string isEqualToString:@""],所以即使你输入退格键,它也能正常工作。

答案 1 :(得分:0)

您可以将3个文本字段用于日,月和年而不是1.eg -

[textfeild_day] [label for "/"] [textfeild_month] [label for "/"] [textfeild_year]