希望有人能够对此有所了解。
我正在为一家公司开发应用,他们有一个自定义UITextField的搜索字段。目前,它使用输入的每个字母来优化搜索。
问题:他们有一个小弹出窗口,指示它正在搜索,每次按键时,你会看到它在屏幕上闪烁。显然,他们不想要这个。
我正在考虑做什么,虽然不确定如何,而不是在每个按键上完善搜索,搜索完成后的搜索。但是,我也不想添加“搜索”按钮。我只是希望他们完成输入,一秒钟,延迟或其他什么,搜索发生。
有没有办法检测用户何时完成输入?有人这样做过吗?
提前致谢。
答案 0 :(得分:9)
您可以使用简单的NSTimer来完成此操作。在shouldChangeCharactersInRange:
中检查定时器是否有效以及是否有效,使其无效,然后重新启动定时器。当时间最终大声开火时,意味着用户没有在您指定的时间间隔内输入任何内容。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (someTimer.isValid) {
[someTimer invalidate];
}
someTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timeToSearchForStuff:) userInfo:nil repeats:NO];
return YES;
}
正如@Jai Govindani指出的那样,为了实现这个方法,你需要将控制器指定为UITextField的委托,并确保你的控制器符合UITextFieldDelegate协议。
答案 1 :(得分:5)
使用方法timerWithTimeInterval:target:selector:userInfo:重复:您必须将计时器添加到runloop。我需要编辑答案如下:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (someTimer.isValid) {
[someTimer invalidate];
}
someTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timeToSearchForStuff:) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:someTimer forMode:NSDefaultRunLoopMode];
return YES;
}
答案 2 :(得分:0)
您可以尝试以下方式
[self performSelector:<your selector> withObject:<object if you want to pass anything> afterDelay:<time delay>];
在UITextField
委托方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string