當用戶輸入UITextfield
,並且他停止2秒時,光標仍然在UITextfield
上,所以我們如何識別此事件?即我想檢查編輯是否結束或不從第一個響應者那裏辭去UITextField
。 這樣做的方法是什麼?找出UITextfield的結束編輯而不退出第一響應者
4
A
回答
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
中輸入/刪除值。
-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)")
}
相關問題
- 1. UITextField不會退出第一響應者?
- 2. 保持UITextField不會退出第一個響應者的狀態
- 3. 使UITextField從另一個類別中退出第一響應者
- 4. 退出多個UITextField的第一個響應者
- 5. UITextField在UIButton touch上退出第一響應者
- 6. iPad不退出響應者
- 7. 如何找出UITextField結束編輯的原因?
- 8. 解除與UISearchBar的鍵盤,而不會退出第一響應者
- 9. TextField不會使用UIModalPresentationFormSheet視圖退出第一響應者
- 10. 當使用UINavigationController時,退出didSelectRowAtIndexPath中的第一響應者
- 11. UITextField本身成爲第一響應者...?
- 12. modalViewController問題與UITextField第一響應者
- 13. 停止UISearchDisplay控制器從退出第一響應者鍵盤
- 14. UITableView - 在外部觸摸上退出第一響應者
- 15. 使用接口生成器退出第一響應者
- 16. NSTextField在退出第一響應者後繪製白色區域
- 17. NSTextField事件並退出第一響應者
- 18. 如何檢查控件是否退出第一響應者或成爲第一響應者?
- 19. UITextField:第一次編輯後鍵盤不出現
- 20. 帶有UIMenucontroller的UILabel不會退出外部觸摸的第一響應者
- 21. 的UITextField中的UITableView不成爲第一個響應者
- 22. UITableViewCell內的UITextField不會成爲第一響應者
- 23. UITextField不會成爲收集視圖中的第一響應者
- 24. 爲UITextField不能成爲第一個響應者UICollectionView的reloadData後
- 25. 我應該結束我的PHP腳本退出或退出;?
- 26. 即使UIResponder對象退出其第一響應者狀態,鍵盤也不會退出
- 27. 在UITextField成爲第一響應者後,UITableView將不會調整
- 28. UITextField:接收事件不是第一響應者
- 29. 是否有可能使iPhone鍵盤不可見/刪除它,而不必退出第一響應者?
- 30. 無法在存儲指針並退出第一個響應者後重新對焦UITextField
這正是我所追求的和一個很棒的解決方案。謝謝! – Tander 2014-03-29 22:01:02