【问题标题】:UITextField append / between dates while enforcing character limitUITextField 在执行字符限制时在日期之间追加/
【发布时间】:2015-06-08 05:52:08
【问题描述】:

我正在使用 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;

}

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

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

【问题讨论】:

    标签: ios objective-c uitextfield


    【解决方案1】:

    您可以将其用于删除字符。

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

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

    【讨论】:

    • 这正是我所需要的!
    【解决方案2】:

    所以我运行了你的代码并实现了一个扫描器来检查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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多