UISearchDisplayController和图像延迟加载

时间:2011-09-03 21:43:37

标签: iphone ios4 uitableview uisearchbar

我正在使用UITableView与UISearchDisplayController结合来搜索表数据数组。

对于显示的每一行,从网络获取图像并在本地缓存。

问题是当用户键入搜索词时,每个键都会触发对我用来启动在线图像提取的shouldReloadTableForSearchString的调用。如果用户快速键入,它将创建多个网络请求,当网络提取完成时,触发它的行可能不再存在,因为搜索已更改。

我想我需要等到用户在发出网络请求之前停止输入,但是还是找不到使用UISearchBar和UITableView的方法..

任何想法?

1 个答案:

答案 0 :(得分:1)

您需要在每次击键时设置一个计时器。假设您假设用户在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];