textField.text 是当前text,不包含刚输入的string
range 是string要输入的位置
string 是刚输入的内容(可能是粘贴过来的一整段string)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
BOOL isChange =YES;
if (textField ==self.cardInputLabel) {
//字符串删除时触发
if ([string isEqualToString:@""] && range.length >0) {
isChange =YES;
//字符串写入时触发
}else {
if (textField.text.length >19) {
isChange =NO;
}else {
//四个字符一组,限制输入字符串的总长度,并且保证从别的地方粘贴的字符串格式也统一
NSInteger loaction = textField.text.length;
NSMutableString *newText = [NSMutableString stringWithString:string];
NSMutableString *mutString = [[NSMutableString alloc] init];
for (int i =0 ,j =0; i < newText.length && loaction + j <19; i++ , j++) {
if ((loaction + j +1) %5 == 0) {
[mutString appendString:@" "];
j++;
}
NSRange nowRange = NSMakeRange(i,1);
[mutString appendString:[newText substringWithRange:nowRange]];
}
string = [mutString uppercaseString] ;
textField.text = [NSString stringWithFormat:@"%@%@",textField.text,string];
}
isChange =NO;
}
}
return isChange;
}