1 @interface ViewController ()<UITextFieldDelegate> 2 { 3 NSString *previousTextFieldContent; 4 UITextRange *previousSelection; 5 } 6 @end
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view, typically from a nib. 5 self.textField.delegate = self; 6 [self.textField addTarget:self action:@selector(formatPhoneNumber:) forControlEvents:UIControlEventEditingChanged]; 7 }
1 - (void)formatPhoneNumber:(UITextField*)textField 2 { 3 NSUInteger targetCursorPosition = 4 [textField offsetFromPosition:textField.beginningOfDocument 5 toPosition:textField.selectedTextRange.start]; 6 NSLog(@"targetCursorPosition:%li", (long)targetCursorPosition); 7 // nStr表示不带空格的号码 8 NSString* nStr = [textField.text stringByReplacingOccurrencesOfString:@" " withString:@""]; 9 NSString* preTxt = [previousTextFieldContent stringByReplacingOccurrencesOfString:@" " 10 withString:@""]; 11 12 char editFlag = 0;// 正在执行删除操作时为0,否则为1 13 14 if (nStr.length <= preTxt.length) { 15 editFlag = 0; 16 } 17 else { 18 editFlag = 1; 19 } 20 21 // textField设置text 22 if (nStr.length > 11) 23 { 24 textField.text = previousTextFieldContent; 25 textField.selectedTextRange = previousSelection; 26 return; 27 } 28 29 // 空格 30 NSString* spaceStr = @" "; 31 32 NSMutableString* mStrTemp = [NSMutableString new]; 33 int spaceCount = 0; 34 if (nStr.length < 3 && nStr.length > -1) 35 { 36 spaceCount = 0; 37 }else if (nStr.length < 7 && nStr.length >2) 38 { 39 spaceCount = 1; 40 41 }else if (nStr.length < 12 && nStr.length > 6) 42 { 43 spaceCount = 2; 44 } 45 46 for (int i = 0; i < spaceCount; i++) 47 { 48 if (i == 0) { 49 [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(0, 3)], spaceStr]; 50 }else if (i == 1) 51 { 52 [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(3, 4)], spaceStr]; 53 }else if (i == 2) 54 { 55 [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(7, 4)], spaceStr]; 56 } 57 } 58 59 if (nStr.length == 11) 60 { 61 [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(7, 4)], spaceStr]; 62 } 63 64 if (nStr.length < 4) 65 { 66 [mStrTemp appendString:[nStr substringWithRange:NSMakeRange(nStr.length-nStr.length % 3, 67 nStr.length % 3)]]; 68 }else if(nStr.length > 3) 69 { 70 NSString *str = [nStr substringFromIndex:3]; 71 [mStrTemp appendString:[str substringWithRange:NSMakeRange(str.length-str.length % 4, 72 str.length % 4)]]; 73 if (nStr.length == 11) 74 { 75 [mStrTemp deleteCharactersInRange:NSMakeRange(13, 1)]; 76 } 77 } 78 NSLog(@"=======mstrTemp=%@",mStrTemp); 79 80 textField.text = mStrTemp; 81 // textField设置selectedTextRange 82 NSUInteger curTargetCursorPosition = targetCursorPosition;// 当前光标的偏移位置 83 if (editFlag == 0) 84 { 85 //删除 86 if (targetCursorPosition == 9 || targetCursorPosition == 4) 87 { 88 curTargetCursorPosition = targetCursorPosition - 1; 89 } 90 } 91 else { 92 //添加 93 if (nStr.length == 8 || nStr.length == 3) 94 { 95 curTargetCursorPosition = targetCursorPosition + 1; 96 } 97 } 98 99 UITextPosition *targetPosition = [textField positionFromPosition:[textField beginningOfDocument] 100 offset:curTargetCursorPosition]; 101 [textField setSelectedTextRange:[textField textRangeFromPosition:targetPosition 102 toPosition :targetPosition]]; 103 } 104 105 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 106 { 107 previousTextFieldContent = textField.text; 108 previousSelection = textField.selectedTextRange; 109 110 return YES; 111 }