UISearchDisplayController和图像延迟加载
问题描述:
我正在使用UITableView与UISearchDisplayController在表数据数组上进行搜索。UISearchDisplayController和图像延迟加载
对于显示的每一行,图像从网络中获取并在本地缓存。
问题是当用户输入一个搜索词时,每个键都会触发一个对我用来启动在线图像获取的shouldReloadTableForSearchString的调用。如果用户键入的速度很快,则会创建多个网络请求,到网络提取完成时,触发它的行可能不再存在,因为搜索已更改。
我想我需要等待,直到用户停止使得网络请求前打字,但仍可能找到一种方法用的UISearchBar和的UITableView这样做..
什么想法?
答
您需要为每个击键设置一个计时器。假设您假设用户在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];
。