我正在尝试在对UITextField
中的字符使用 Enter 后添加-
。情况是添加信用卡/借记卡号码。我已经搜索了周围,但据我所知,这些方法无效。我在delegate
方法中将19
字符的限制设置为 16 个卡号和 3 个-
:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger length = [[textField text] length] - range.length + string.length;
return textField.text.length <=19;
}
所以现在length
给了我确切的长度,如果当时UITextField
的话。现在工作正常,我需要知道如果这个字段达到3
,7
或11
字段中添加-
,我应该写什么。所有将输入的卡片都是这种格式xxxx-xxxx-xxxx-xxxx
所以这就是我试图在 4 个字符后添加-
的。
我也在该方法中尝试过delegate
但没有用:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setGroupingSeparator:@"-"];
[formatter setGroupingSize:4];
[formatter setUsesGroupingSeparator:YES];
NSString *num = textField.text ;
num= [num stringByReplacingOccurrencesOfString:@"" withString:@"-"];
NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
textField.text=str;
NSLog(@"%@",str);
return textField.text.length <=19;
在你的委托方法中尝试这个,这是另一种方法
if (textField.text.length < 19 && ![string isEqualToString:@""]) {
NSString *tempoText = textField.text;
tempoText = [tempoText stringByReplacingOccurrencesOfString:@"-" withString:@""];
if (tempoText.length >= 4) {
NSMutableString *mutString = [tempoText mutableCopy];
NSUInteger len = mutString.length / 4;
int j = 0;
for (int i = 1; i <= len; i ++) {
NSUInteger index = 4 * i;
index += j;
j++;
[mutString insertString:@"-" atIndex:index];
}
tempoText = mutString;
}
[textField setText:tempoText];
return YES;
}
https://github.com/stripe/PaymentKit/tree/master/PaymentKit
将此第三方库用于信用卡/借记卡,这是一个面糊,只需使用即可。
试试这个它会起作用
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init] ;
if([string length]==0)
{
[formatter setGroupingSeparator:@"-"];
[formatter setGroupingSize:4];
[formatter setUsesGroupingSeparator:YES];
[formatter setSecondaryGroupingSize:2];
NSString *num = textField.text ;
num= [num stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
[formatter release];
textField.text=str;
NSLog(@"%@",str);
return YES;
}
else {
[formatter setGroupingSeparator:@"-"];
[formatter setGroupingSize:2];
[formatter setUsesGroupingSeparator:YES];
[formatter setSecondaryGroupingSize:2];
NSString *num = textField.text ;
if(![num isEqualToString:@""])
{
num= [num stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]];
[formatter release];
textField.text=str;
}
//NSLog(@"%@",str);
return YES;
}
//[formatter setLenient:YES];
}