2013-03-14 52 views

回答

10

是的,我們可以檢查!與UITextField委託,- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

- (void) callMeAfterTwoSeconds { 
    NSLog(@"I'll call after two seconds of inactivity!"); 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    [NSRunLoop cancelPreviousPerformRequestsWithTarget:self]; 
    [self performSelector:@selector(callMeAfterTwoSeconds) withObject:nil afterDelay:2.0]; 

    return YES; 
} 

當你輸入(敲擊鍵盤從按鍵),將取消對callMeAfterTwoSeconds功能以前調用,一旦你停下來,它將它所後2秒延時打電話,是的,它會在2秒後打電話。

更新: 甚至可以傳遞文本框的對象performSelector知道哪些文本框是無效的,對於您的callMeAfterTwoSeconds功能就會像,

- (void) callMeAfterTwoSeconds:(UITextField *)textfield { 
    if(textfield == txtUserName) { 
     NSLog(@"User textfield has NO activity from last two seconds!"); } 
} 
6

轉到UITextField的連接檢查器,並將「編輯已更改」從「已發送事件」列表連接到您所選的預定義IBAction。或者,如果你不使用Storyboard,你可以通過編程來完成。

[youTextField addTarget:self action:@selector(textFieldInputDidChange:) forControlEvents:UIControlEventEditingChanged]; 

現在你只需連接IBAction將每用戶改變了UITextField一個字符時間發射。創建一個timer作爲伊娃。現在每次調用IBAction時,啓動計時器,如果它將在未重新啓動的情況下達到2秒,您知道用戶未在UITextField中輸入/刪除值。

+0

這正是我所追求的和一個很棒的解決方案。謝謝! – Tander 2014-03-29 22:01:02

-1

我不認爲調用[NSRunLoop cancelPreviousPerformRequestsWithTarget:self]是一個很好的做法。

相反,我會做:

[self.searchTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 
//or select the textfield in the storyboard, go to connections inspector and choose the target for 'Editing Changed' 


- (IBAction)textFieldDidChange:(id)sender { 
    [self performSelector:@selector(editingChanged:) withObject:self.searchTextField.text afterDelay:2.0]; 
} 

- (void)editingChanged:(NSString *)text { 
    if ([text isEqualToString:self.searchTextField.text]) { 
     //do your thing 
    } 
} 

這種方式,用戶可以輸入,它會觸發一個呼叫editingChanged:,那麼你可以仔細檢查,如果該值同時改變,如果它沒有那麼用戶停止輸入2秒鐘。

2

我這樣做了searchBar,但我認爲它也適用於UITextField。代碼在Swift中。 :)

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
    searchTimer?.invalidate() 
    searchTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("search"), userInfo: nil, repeats: false) 
} 

func search() { 
    println("search \(searchBar.text)") 
} 
相關問題