在UITextField中输入后稍微延迟后执行操作

时间:2013-08-16 15:06:49

标签: ios uitextfield

希望有人能够对此有所了解。

我正在为一家公司开发应用,他们有一个自定义UITextField的搜索字段。目前,它使用输入的每个字母来优化搜索。

问题:他们有一个小弹出窗口,指示它正在搜索,每次按键时,你会看到它在屏幕上闪烁。显然,他们不想要这个。

我正在考虑做什么,虽然不确定如何,而不是在每个按键上完善搜索,搜索完成后的搜索。但是,我也不想添加“搜索”按钮。我只是希望他们完成输入,一秒钟,延迟或其他什么,搜索发生。

有没有办法检测用户何时完成输入?有人这样做过吗?

提前致谢。

3 个答案:

答案 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
相关问题