2011-09-25 56 views
0

我已經搜索了一個答案,但無法找到與此相關的答案。輸入每個字符後驗證文本字段

我想驗證每個輸入到一個文本字段,但不知道如何去做,這個想法是檢查服務器上存在的用戶名,所以我會假設我需要發佈到服務器每次輸入的東西如果成功做了什麼。

可能有人請告知我將不勝感激。

+0

檢查此鏈接:http://stackoverflow.com/questions/5765654/textfield-validation-with-regular-expression。真的令人印象深刻的答案..它幫助我。祝你好運 – Meet

回答

2

您可以使用addTarget:action:forControlEvents:UIControlEventValueChanged(例如:[textfield addTarget:self action:@selector(usernameChanged:) forControlEvents:UIControlEventValueChanged)。這會在文本更改後通知您(因此,當您收到usernameChanged:時,您將進行最後修改)。

這可能是一個好主意,每當用戶名發生變化時,您可以不發送請求到服務器,而是在文本字段丟失字幕或從最後一次更改過去一段時間時發送請求(您可以使用NSTimer )。

您應該使用單個異步請求。如果請求處於活動狀態並再次編輯文本字段,則應取消該請求並將其設置爲零(因爲沒有理由檢查舊用戶名)。如果請求成功顯示圖標,或者從服務器獲取結果時想執行的操作。

編輯: 不知道UIControlEventValueChanged工作在iOS上的早期版本,或者如果它是從我身邊一個錯誤,但它似乎沒有任何失效。應該使用UIControlEventEditingChanged

+0

非常感謝你的幫助我會研究這也似乎是最好的方式去!謝謝 – SirL0fty

2

實現委託方法textField:shouldChangeCharactersInRange:replacementString:大約每次更改文本予以通報。根據您是否要接受更改,返回YESNO

這可能是一個非常糟糕的主意,要求服務器爲每一個按鍵的批准,因爲這會造成不可承受的滯後,導致非常糟糕的用戶體驗。

+0

嗨,奧萊感謝您的回覆,你能爲我提供某種例子,請即時通訊,這是所有這一切。謝謝 – SirL0fty

+0

不,我不會爲你寫代碼,因爲我認爲這對學習不好。 UITextField的文檔和上面列出的方法可以幫助你。 –

+0

謝謝Ole我欣賞那! :) – SirL0fty

2

Ole說的是絕對正確的。我只是給你一個他想說的例子。

首先符合你的類的UITextFieldDelegate協議。然後,確保在viewDidLoad(或類似),您的委託設置爲你的類:

myTextField.delegate = self; 

接下來,你可以實現奧萊剛提過的方法。然而,在你的情況你不驗證用戶能否輸入任何內容或沒有,你只是想知道什麼進入這樣你就可以在網上進行驗證。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    [self verifyTheUserWithUsername:[textField.text stringByReplacingCharactersInRange:range withString:string]]; 
    //do your appropriate check here 
    return YES; //we allow the user to enter anything 
} 
+0

'[self verifyTheUserWithUsername:textField。文本];在'shouldChangeCharactersInRange:'方法中不能很好地工作,因爲它在應用到文本字段之前通知編輯。 –

+0

感謝你的例子隊友我現在就試試這個! – SirL0fty

+0

@ SirL0fty:我會毫不猶豫地選擇Ole和babbidi提到的建議。在每次按鍵之後檢查服務器是否會讓您的應用程序崩潰。啓動一個計時器並使其失效,如果按下另一個鍵肯定會是要走的路。我建議像檢查間隔時間一樣。 –