您需要为每个击键设置一个计时器。假设您假设用户在1秒前收到最后一个关键笔划时已停止打字。您应该安排一个计时器,而不是从shouldReloadTableForSearchString:
返回YES。如果在1秒之前收到另一个关键笔划,则使计时器无效并重置。
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
if(myTimer) //a timer is already scheduled. Invalidate it.
{
[myTimer invalidate]; //myTimer is an iVar
myTimer = nil;
}
myTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:1] interval:0 target:self selector:@selector(search:) userInfo:searchString repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:myTimer forMode:NSDefaultRunLoopMode];
return NO;
}
- (void)search:(NSTimer*)theTimer
{
//make network request here
}
当收到来自网络呼叫的响应时,呼叫[self.searchDisplayController.searchResultsTableView reloadData];
。