UITextField 在执行字符限制的同时附加/日期之间

UITextField append / between dates while enforcing character limit

我正在使用 UITextField 并且需要强制执行以下日期格式:

12/17

我知道如何执行 4 个字符的限制:

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

    if ([textField isEqual:self.billingExpirationDate]) {

        if (range.length + range.location > textField.text.length) {
            return NO;
        }

        NSUInteger newLength = [textField.text length] + [string length] - range.length;

        return newLength <= 4;

    }

    return YES;

}

但是,如果我在键入两个数字后尝试将 / 插入到字符串中,它就会搞砸,并且不会让用户使用删除按钮。

有没有人知道我如何遵循所需的格式,同时只允许用户输入四个数字字符,并且显然让他们在需要时删除它们?

您可以使用它来删除字符。

if(string.length==0 && range.length==1)
   {
       return YES;
   }

如果您需要更多帮助,请告诉我。谢谢.....

所以我 运行 你的代码并实现了一个扫描器来检查 string 是否是整数,如果 range 在输入而不是删除时到达位置+长度 2,'/ ' 在 string

之前添加
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if ([textField isEqual:self.billingExpirationDate]) {

    NSScanner *scanner = [NSScanner scannerWithString:string];
    BOOL isInteger=[scanner scanInteger:NULL] && [scanner isAtEnd];
    if (string.length==0) isInteger=YES; //since an empty string while deleting will also return NO
    if (isInteger)
    {
       if (range.length + range.location > textField.text.length) {
        return NO;
       }

       if (range.length + range.location==2 && string.length) {
           [textField setText:[textField.text stringByAppendingString:@"/"]];
       }


    NSUInteger newLength = [textField.text length] + [string length] - range.length;

    return newLength <= 5;
    }
    else return NO;

    }

    return YES;

}