iOS Objective-C UITextField日期格式

时间:2015-11-10 18:13:42

标签: ios uitextfield

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

我尝试按照此处UITextField format in xx-xx-xxx的代码片段进行操作,但是当它在有效期为0的过期日期使用时,它使用NSNumber,但它不起作用。我搜索谷歌,也没有出现任何问题。前导零被删除。如何在用户输入时使用UITextField格式化为MM / YY(例如05/16)?

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

enter image description here

1 个答案:

答案 0 :(得分:4)

我不确定为什么我投票支持一个合法的问题,但我解决了我的问题,所以其他人可以避免问这个问题。

您的课程必须符合 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;
}