如何知道uisearchbar中的连续输入以及在ios中停止输入的时间

时间:2014-09-05 09:42:37

标签: ios objective-c uisearchbar

我希望在用户停止输入时不执行键盘操作以及用户输入方法时不执行该方法。

2 个答案:

答案 0 :(得分:3)

您可以使用或不使用NSTimer来执行此操作。

1.没有NSTimer

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(request) object:nil];
    [self performSelector:@selector(request) withObject:nil afterDelay:YOUR_DESIRED_PAUSE_TIME];
 }

2.使用NSTimer

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if (theTimer) 
    {
        if ([theTimer isValid]) 
        { 
            [theTimer invalidate]; 
        }
        theTimer = nil;
    }
    theTimer = [NSTimer scheduledTimerWithTimeInterval:YOUR_DESIRED_PAUSE_TIME target:self selector:@selector(userPaused:) userInfo:nil repeats:NO];
}

答案 1 :(得分:0)

我认为没有直接的方法可以做到这一点,所以你必须稍微解决一下。

您可以在用户输入时收听委托方法。 我会使用它,并将计时器设置为属性,在那里激活(例如3秒)。如果用户再次键入,我会重新启动计时器。 这样,只有当用户停止键入3秒钟时,计时器才会启动。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if(self.timer)
    {
        [self.timer invalidate];
        self.timer = nil;
    }       
    self.timer = [NSTimer scheduledTimerWithTimeInterval: 3 target:self selector: @selector(timerFired:) userInfo: nil repeats: NO];
}

这应该做你想要的!当用户取消选择搜索栏时,不要忘记使计时器无效。