蘋果輸入手機號變用戶的名字

今天我們的用戶輸入手機號之后變成了用戶的名字,沒辦法獲取驗證碼,因為手機格式不對。我還是頭一次遇到這樣的事情。

手機號變姓名.png

1.文本替換

遇到這種事情肯定去百度啊,發(fā)現(xiàn)還真有人和我遇到相同的情況,原來這個用戶在設置-》通用-》鍵盤-》文本替換把自己的手機號設置自己的名字了,這樣只要在UITextField中輸入自己的手機號,輸入完就會變成自己的名字,出現(xiàn)上圖的情況。


文本替換.png

其實這個功能還是滿好玩的,不過用戶要是把自己的手機號設置文本替換了,那么在APP里注冊就會出現(xiàn)問題了。當時我就想是不是微信也這樣啊,

微信.png

看來微信已經(jīng)解決了這個問題,他手機號中間加了兩個空格,而文本替換是不允許加空格的,所以可以正常完成登錄。這里不得不為微信的工程師們點贊?。〔贿^淘寶更厲害,沒有加空格,也沒有進行文本替換,真是厲害啊。我又去看了其他App,基本上都是用空格來防止文本替換的,但是也有一些注冊登錄不了的,有興趣的可以去嘗試。

2.用空格防止文本替換

#pragma mark - UITextFieldDelegate
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == _txtUserName) {
        // 12312345678-> 123 1234 5678
        if (range.location == 3 || range.location == 8) {
            
            textField.text = [textField.text stringByAppendingString:@" "];
        }
        // 手機號最多輸13位 包含兩個空格,防止文本替換
        if(range.location >= 13){
            return NO;
        }
    }
    return YES;
}

這樣就成功的防止文本替換了,因為文本替換不能包含空格。但是我又發(fā)現(xiàn)刪除不了了,就是當刪除到空格的時候就不能繼續(xù)刪除了。難道是數(shù)字鍵盤里不能刪除空格???后來我分析代碼發(fā)現(xiàn)當我刪除到空格的時候,就會自動幫我在后面再加上一個空格,這樣我就永遠把空格刪除不了了。所以我要區(qū)分只有在輸入的時候添加空格,刪除到123 1234 5678的5時,自動把5前面的空格去掉。

3.區(qū)分輸入和刪除

當UITextField刪除的時候執(zhí)行- (void)deleteBackward;方法,這個方法在UIKeyInput協(xié)議中。那這就好辦了,自定義UITextField的,重寫- (void)deleteBackward;,這個方法一執(zhí)行,就發(fā)通知,或者走代理,都可以。后來我發(fā)現(xiàn)這有點麻煩,我還要自定義,發(fā)通知/代理,太麻煩了。所以我就想通過監(jiān)測UITextField的location來區(qū)分輸入或刪除。

#pragma mark - UITextFieldDelegate
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == _txtUserName) {
        // 刪除
        if (_lastLocation > range.location) {
            
            if (range.location == 9 || range.location == 4) {
                // 刪除到空格后一位的時候,自動把空格也去掉
                textField.text = [textField.text substringToIndex:range.location];
            }
            _lastLocation = range.location - 1;
            return YES;
            
        }else {
            // 輸入
            if (range.location == 3 || range.location == 8) {
                
                textField.text = [textField.text stringByAppendingString:@" "];
            }
        }
        _lastLocation = range.location;
        // 手機號最多輸13位 包含兩個空格,防止文本替換
        if(range.location >= 13){
            return NO;
        }
    }
    return YES;
}

其實用戶一多,對開發(fā)者來說成長會非???,因為什么情況都會遇到,我們就在解決問題中成長。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容