如何在 UITextField 之间放置保留字符



我正在尝试在对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的话。现在工作正常,我需要知道如果这个字段达到3711字段中添加-,我应该写什么。所有将输入的卡片都是这种格式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];
}

最新更新