我已經搜索了一個答案,但無法找到與此相關的答案。輸入每個字符後驗證文本字段
我想驗證每個輸入到一個文本字段,但不知道如何去做,這個想法是檢查服務器上存在的用戶名,所以我會假設我需要發佈到服務器每次輸入的東西如果成功做了什麼。
可能有人請告知我將不勝感激。
我已經搜索了一個答案,但無法找到與此相關的答案。輸入每個字符後驗證文本字段
我想驗證每個輸入到一個文本字段,但不知道如何去做,這個想法是檢查服務器上存在的用戶名,所以我會假設我需要發佈到服務器每次輸入的東西如果成功做了什麼。
可能有人請告知我將不勝感激。
您可以使用addTarget:action:forControlEvents:
與UIControlEventValueChanged
(例如:[textfield addTarget:self action:@selector(usernameChanged:) forControlEvents:UIControlEventValueChanged
)。這會在文本更改後通知您(因此,當您收到usernameChanged:
時,您將進行最後修改)。
這可能是一個好主意,每當用戶名發生變化時,您可以不發送請求到服務器,而是在文本字段丟失字幕或從最後一次更改過去一段時間時發送請求(您可以使用NSTimer
)。
您應該使用單個異步請求。如果請求處於活動狀態並再次編輯文本字段,則應取消該請求並將其設置爲零(因爲沒有理由檢查舊用戶名)。如果請求成功顯示圖標,或者從服務器獲取結果時想執行的操作。
編輯: 不知道UIControlEventValueChanged
工作在iOS上的早期版本,或者如果它是從我身邊一個錯誤,但它似乎沒有任何失效。應該使用UIControlEventEditingChanged
。
非常感謝你的幫助我會研究這也似乎是最好的方式去!謝謝 – SirL0fty
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
}
'[self verifyTheUserWithUsername:textField。文本];在'shouldChangeCharactersInRange:'方法中不能很好地工作,因爲它在應用到文本字段之前通知編輯。 –
感謝你的例子隊友我現在就試試這個! – SirL0fty
@ SirL0fty:我會毫不猶豫地選擇Ole和babbidi提到的建議。在每次按鍵之後檢查服務器是否會讓您的應用程序崩潰。啓動一個計時器並使其失效,如果按下另一個鍵肯定會是要走的路。我建議像檢查間隔時間一樣。 –
檢查此鏈接:http://stackoverflow.com/questions/5765654/textfield-validation-with-regular-expression。真的令人印象深刻的答案..它幫助我。祝你好運 – Meet