Ear*_*rth 3 iphone uitextfield
卡号前12位应为安全入口,其余4位正常,例如我输入卡号 - 4111 1111 1111 1111.在文本字段输入此文本时,前12位数应为安全入口,后4位应为正常入口即1111.(最后卡号看起来像XXXXXXXXXXXX1111).
任何人都可以解释我该怎么做.
一种选择是实现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.这会跟踪实际的卡号.