作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
卡号前 12 位数字应为安全输入,其余 4 位数字应为正常输入,例如我正在输入卡号 - 4111 1111 1111 1111。在文本字段中输入此文本时,前 12 位数字应为安全输入,后 4 位数字应为作为正常输入,即 1111。(最终卡号将类似于 XXXXXXXXXXXX1111)。
谁能解释一下我该怎么做。
最佳答案
一种选择是实现 UITextField
委托(delegate)方法 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;
}
其中_cardNum
是NSString
类型的ivar。这会跟踪实际的卡号。
关于iphone - 卡号前 12 位数字应安全输入,其余 4 位数字正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244313/
我是一名优秀的程序员,十分优秀!