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