卡号前12位应为安全入口,其余4位为正常

Ear*_*rth 3 iphone uitextfield

卡号前12位应为安全入口,其余4位正常,例如我输入卡号 - 4111 1111 1111 1111.在文本字段输入此文本时,前12位数应为安全入口,后4位应为正常入口即1111.(最后卡号看起来像XXXXXXXXXXXX1111).

任何人都可以解释我该怎么做.

rma*_*ddy 5

一种选择是实现UITextField委托方法textField:shouldChangeCharactersInRange:replacementString:.在这种方法中,您希望始终返回NO.但首先你要更新文本字段的文本,使前12位显示X.你会跟踪另一个ivar中的实际文本.

编辑:这应该工作:

- (NSString *)maskNumber:(NSString *)num {
    static NSString *twelveX = @"XXXXXXXXXXXX";

    if (num.length < twelveX.length) {
        return [twelveX substringToIndex:num.length];
    } else {
        return [twelveX stringByAppendingString:[num substringFromIndex:twelveX.length]];
    }
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // Determine where the cursor should be
    UITextRange *selRange = textField.selectedTextRange;
    NSInteger cursorPos = [textField offsetFromPosition:textField.beginningOfDocument toPosition:selRange.start] + string.length;

    _cardNum = [_cardNum stringByReplacingCharactersInRange:range withString:string];

    textField.text = [self maskNumber:_cardNum];

    // Reset the cursor position
    UITextPosition *startPos = [textField positionFromPosition:textField.beginningOfDocument offset:cursorPos];
    selRange = [textField textRangeFromPosition:startPos toPosition:startPos];
    textField.selectedTextRange = selRange;

    return NO;
}
Run Code Online (Sandbox Code Playgroud)

其中_cardNum是类型的实例变量NSString.这会跟踪实际的卡号.