当用户输入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. iPad不退出响应者
- 5. 如何找出UITextField结束编辑的原因?
- 6. 解除与UISearchBar的键盘,而不会退出第一响应者
- 7. TextField不会使用UIModalPresentationFormSheet视图退出第一响应者
- 8. modalViewController问题与UITextField第一响应者
- 9. UITextField辞职第一响应者iOS4
- 10. 停止UISearchDisplay控制器从退出第一响应者键盘
- 11. UITableView - 在外部触摸上退出第一响应者
- 12. 如何检查控件是否退出第一响应者或成为第一响应者?
- 13. 的UITextField中的UITableView不成为第一个响应者
- 14. UITextField不会成为收集视图中的第一响应者
- 15. 我应该结束我的PHP脚本退出或退出;?
- 16. UITextField:接收事件不是第一响应者
- 17. 是否有可能使iPhone键盘不可见/删除它,而不必退出第一响应者?
- 18. 干净的方式退出NSSearchField的第一响应者完成后?
- 19. 退出循环结束
- 20. 第一响应者
- 21. UITextField编辑开始呼吁查看结束编辑
- 22. iOS:弹出菜单不符合第一响应者集合
- 23. 让UIView在视图外部点击时退出第一响应者
- 24. 的UpdatePanel退出响应Response.TransmitFile
- 25. jsTree:退出编辑模式?
- 26. 退出编辑模式
- 27. UITextField无法在动画制作时成为第一响应者
- 28. 当UITextField是第一响应者时,UIButton仍然可选择吗?
- 29. 当UITextField成为第一响应者时自动使用键盘
- 30. 当UITextField成为第一响应者时,手动滚动UITableViewController
这正是我所追求的和一个很棒的解决方案。谢谢! – Tander 2014-03-29 22:01:02