iOS UITextField實現輸入手機號時自動添加空格

背景

爲了優化用戶體驗,咱們每每會在讓用戶輸入手機號碼時添加空格,好比:151 6558 1234.那麼在iOS中如何實現呢?html

實現方法

iOS中的輸入框給UITextField添加UIControlEventEditingChanged事件 ,該方法實現輸入框文字變更時的監聽:textFieldDidEditing:app


.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即可實現實現輸入手機號時自動添加空格,spa

//備註:當到第四位或第九位時,若是此時是正在輸入,則自動增長空格,若是正在刪除,則自動刪除空格!!!
code

//當到第13位時,截取前面的13位字符串,收起鍵盤orm

//若想要獲取輸入的手機,須要先刪除空格; NSString *textFieldStr =[self.textField.text stringByReplacingOccurrencesOfString:@" "withString:@""];htm



方法二:

UITextField格式化電話號碼和銀行卡

//最近又發現了個新的方法也還不錯哦blog

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 事件

    NSString *text = [textField text];ci

    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.length4)];

        newString = [newString stringByAppendingString:subString];

        if (subString.length == 4) {

            newString = [newString stringByAppendingString:@" "];

        }

        text = [text substringFromIndex:MIN(text.length4)];

    }

    

    newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];

    

    if (newString.length >= 14) {

        return NO;

    }

    [textField setText:newString];

    return NO;

}

這段代碼是極好的:不但一個個輸入字符時沒有問題,並且能夠實現,複製粘貼過來後再實現格式化