1.创建两个属性
@property (nonatomic, strong) NSString *previousTextFieldContent;
@property (nonatomic, strong) UITextRange *previousSelection;
2.在- (void)viewDidLoad方法中添加下方法
- (void)viewDidLoad {
[self.userNameTextField addTarget:self action:@selector(formatPhoneNumber:) forControlEvents:UIControlEventEditingChanged];
}
3.赋值属性
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
_previousTextFieldContent = textField.text;
_previousSelection = textField.selectedTextRange;
}
4.核心方法
- (void)formatPhoneNumber:(UITextField*)textField {
NSUInteger targetCursorPosition = [textField offsetFromPosition:textField.beginningOfDocument toPosition:textField.selectedTextRange.start];//光标位置
NSLog(@"targetCursorPosition:%li", (long)targetCursorPosition);
NSString* nStr = [textField.text stringByReplacingOccurrencesOfString:@" " withString:@""];
NSString* preTxt = [_previousTextFieldContent stringByReplacingOccurrencesOfString:@" " withString:@""];
char editFlag = 0;// 正在执行删除操作时为0,否则为1
if (nStr.length <= preTxt.length) {
editFlag = 0;
} else {
editFlag = 1;
}
if (nStr.length > 11) {
textField.text = _previousTextFieldContent;
textField.selectedTextRange = _previousSelection;
return;
}
NSString* spaceStr = @" ";
NSMutableString *mStrTemp = [NSMutableString string];
int spaceCount = 0;
if (nStr.length < 3 && nStr.length > -1) {
spaceCount = 0;
}else if (nStr.length < 7&& nStr.length > 2){
spaceCount = 1;
}else if (nStr.length < 12&& nStr.length > 6){
spaceCount = 2;
}
for (int i = 0; i < spaceCount; i++){
if (i == 0) {
[mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(0, 3)],spaceStr];
}else if (i == 1){
[mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(3, 4)], spaceStr];
}
}
if (nStr.length == 11){
[mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(7, 4)], spaceStr];
}
NSLog(@"1111111111mstrTemp=%@",mStrTemp);
if (nStr.length < 4 && nStr.length > 0){
[mStrTemp appendString:[nStr substringWithRange:NSMakeRange(nStr.length-nStr.length % 3,nStr.length % 3)]];
}else if(nStr.length > 3){
NSString *str = [nStr substringFromIndex:3];
[mStrTemp appendString:[str substringWithRange:NSMakeRange(str.length-str.length % 4,str.length % 4)]];
if (nStr.length == 11){
[mStrTemp deleteCharactersInRange:NSMakeRange(13, 1)];
}
}
NSLog(@"=======mstrTemp=%@",mStrTemp);
textField.text = mStrTemp; //赋值
// textField设置selectedTextRange
NSUInteger curTargetCursorPosition = targetCursorPosition;// 当前光标的偏移位置
if (editFlag == 0){
//删除
if (targetCursorPosition == 9 || targetCursorPosition == 4){
curTargetCursorPosition = targetCursorPosition - 1;
}
}
else {
//添加
if (nStr.length == 8 || nStr.length == 3){
curTargetCursorPosition = targetCursorPosition + 1;
}
}
UITextPosition *targetPosition = [textField positionFromPosition:[textField beginningOfDocument] offset:curTargetCursorPosition];
[textField setSelectedTextRange:[textField textRangeFromPosition:targetPosition toPosition :targetPosition]];// 设置光标位置
}
如果想把空格改成其他字符, 可以将下图中箭头所指的位置,更改为该字符即可.
Paste_Image.png
网友评论