背景
爲了優化用戶體驗,我們往往會在讓用戶輸入手機號碼時添加空格,比如:151 6558 1234
.那麼在iOS中如何實現呢?
實現方法
iOS中的輸入框給UITextField添加UIControlEventEditingChanged事件 ,該方法實現輸入框文字變動時的監聽:textFieldDidEditing:
.DEMO
NSInteger i;//定義全局變量
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
i = 0;
[self.textField addTarget:self action:@selector(textFieldDidEditing:) forControlEvents:UIControlEventEditingChanged];
}
-(void)textFieldDidEditing:(UITextField *)textField{
if (textField == self.textField) {
if (textField.text.length > i) {
if (textField.text.length == 4 || textField.text.length == 9 ) {//輸入
NSMutableString * str = [[NSMutableString alloc ] initWithString:textField.text];
[str insertString:@" " atIndex:(textField.text.length-1)];
textField.text = str;
}if (textField.text.length >= 13 ) {//輸入完成
textField.text = [textField.text substringToIndex:13];
[textField resignFirstResponder];
}
i = textField.text.length;
}else if (textField.text.length < i){//刪除
if (textField.text.length == 4 || textField.text.length == 9) {
textField.text = [NSString stringWithFormat:@"%@",textField.text];
textField.text = [textField.text substringToIndex:(textField.text.length-1)];
}
i = textField.text.length;
}
}
}
ok,上面demo便可實現實現輸入手機號時自動添加空格,
//備註:當到第四位或第九位時,如果此時是正在輸入,則自動增加空格,如果正在刪除,則自動刪除空格!!!
//當到第13位時,截取前面的13位字符串,收起鍵盤
//若想要獲取輸入的手機,需要先刪除空格; NSString *textFieldStr =[self.textField.text stringByReplacingOccurrencesOfString:@" "withString:@""];
方法二:
UITextField格式化電話號碼和銀行卡//最近又發現了個新的方法也還不錯哦
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *text = [textField text];
NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
return NO;
}
text = [text stringByReplacingCharactersInRange:range withString:string];
text = [text stringByReplacingOccurrencesOfString:@" " withString:@""];
// 如果是電話號碼格式化,需要添加這三行代碼
NSMutableString *temString = [NSMutableString stringWithString:text];
[temString insertString:@" " atIndex:0];
text = temString;
NSString *newString = @"";
while (text.length > 0) {
NSString *subString = [text substringToIndex:MIN(text.length, 4)];
newString = [newString stringByAppendingString:subString];
if (subString.length == 4) {
newString = [newString stringByAppendingString:@" "];
}
text = [text substringFromIndex:MIN(text.length, 4)];
}
newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];
if (newString.length >= 14) {
return NO;
}
[textField setText:newString];
return NO;
}
這段代碼是極好的:不但一個個輸入字符時沒有問題,而且可以實現,複製粘貼過來後再實現格式化