之前遇到實時監(jiān)聽 UItextField變化發(fā)現(xiàn)使用它的代理方法會有其他問題出現(xiàn),最后得出結論得添加addtarget事件才可以,趁著這會有時間,把這些整理一下。如果你也遇到了此問題,那么請看以下說明,助你了解并解決問題
- 這個時候,自然會想到使用UItextField的代理方法:
#pragma mark -監(jiān)聽uitextfield的值得變化
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSLog(@"textField4 - 正在編輯, 當前輸入框內(nèi)容為: %@",textField.text);
return YES;
}
但是這個方法有一個問題,他只會監(jiān)聽每次輸入或者刪除前的值是多少,當修改后,你并不知道最后一個字符改變后,UITextField中的值是多少。
也可能會想到,每次結束編輯的時候,將相應的UITextField中的值傳出,這個時候調(diào)用:
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
str = textField.text;
return YES;
}
但是這個方法的前提是你點擊了return按鈕,否則并不會被調(diào)用:
為了能夠實時的監(jiān)聽textField的輸入的改變,首先給UItextField添加一個編輯事件,每次這個事件觸發(fā)一個函數(shù),在相應的函數(shù)中得到UItextField的值。當然你也可以在這個函數(shù)中做你想要的處理,比如將UItextField的值以通知的形式發(fā)送給相關的控制器,以便做下一步處理。而在本項目中,只需要實時的記錄每一個cell中的UItextField的值就可以。
具體代碼如下:
[textField addTarget:self action:@selector(changedTextField:) forControlEvents:UIControlEventEditingChanged];
#pragma mark -給每個cell中的textfield添加事件,只要值改變就調(diào)用此函數(shù)
-(void)changedTextField:(id)textField
{
NSLog(@"值是---%@",textField.text);
}