【问题标题】:iOS Objective-C UITextField Date FormattingiOS Objective-C UITextField 日期格式
【发布时间】:2015-11-10 18:13:41
【问题描述】:

我正在尝试创建一个信用卡处理视图控制器。我有一个到期日期字段,我想即时将其格式化为 MM/YY。

我试图从这里UITextField format in xx-xx-xxx 跟踪 sn-p,但是当在具有前导 0 的到期日期使用时它使用 NSNumber,它不起作用。我搜索了谷歌,也没有任何结果。前导零被删除。如何在用户输入时使用 UITextField 即时格式化为 MM/YY(例如 05/16)?

这是可能的,因为 Stripe 的到期日期 UITextField 确实在他们的库中完成。

【问题讨论】:

  • 如何删除前导零是一个问题?你不能只使用[NSString stringWithFormat:@"%02d/%02d", month, year]; 格式化文本字段吗?
  • 他希望将其格式化为 09/01 @trojanfoe 我正要建议使用 trojanfoe 写的内容:D
  • 这很容易。刚刚为数字输入创建了文本字段,并检查输入的数字是否小于 10,然后添加零,否则在文本字段中输入值。
  • 用您尝试过的内容更新您的问题,并解释您在使用代码时遇到的问题。
  • 但是当用户在 TextField 中输入信息时,如何格式化字符串?

标签: ios uitextfield


【解决方案1】:

我不知道为什么我对一个合法的问题投了反对票,但我解决了我的问题,这样其他人就可以避免问了。

您的类需要符合 UITextFieldDelegate 才能使其工作。

我基于 viewDidLoad 函数中的 UIControlEventEditingChanged 事件创建了一个动作。

     [dateUIText addTarget:self
             action:@selector(dateTextFieldDidChange:) 
             forControlEvents:UIControlEventEditingChanged];

这是 dateTextFieldDidChange 函数在月份后添加“/”时的样子:

- (void) dateTextFieldDidChange: (UITextField *)theTextField {

   NSString *string = theTextField.text;

   if (string.length == 2) {

       theTextField.text = [string stringByAppendingString:@"/"];

   } else if (string.length > 5) {

       theTextField.text = [string substringToIndex:5];

   }

}

当用户尝试退格以对月份进行任何调整时,上述功能将不允许这样做,因此需要此功能来协助:

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


   if ([string isEqualToString:@""] && textField.text.length == 3) {

       NSString *dateString = textField.text;
         textField.text = 
            [dateString stringByReplacingOccurrencesOfString:@"/" withString:@""];

}


   return YES;
}

【讨论】:

  • 谢谢!它工作完美。
  • 如果有人删除了字符,你应该更新方法,没有回应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多