iOS:等到用户完成输入然后发送请求

时间:2014-07-01 16:35:06

标签: ios objective-c uitableview uisearchbar

我有一个简单的 UITableView UISearchBar / UISearchDisplayController ,它通过使用RKObjectManager从远程 ElasticSearch 服务器获取结果。 我遇到的问题是,如果用户快速键入或者术语有点大,则有几个请求失败,有时我无法得到结果。

是否可以选择等到用户停止输入然后发送请求 而不是按他输入的每个字母发送请求?

2 个答案:

答案 0 :(得分:24)

在发送请求之前添加一个小延迟,然后在用户继续键入

时取消该延迟请求
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];

    [self performSelector:@selector(sendSearchRequest) withObject:searchText afterDelay:0.1f];
}

您可能需要调整延迟时间。太长时间,并且用户注意到存在延迟,太短并且您遇到与现在相同的问题

答案 1 :(得分:8)

这适用于swift版本

NSObject.cancelPreviousPerformRequestsWithTarget(self)
self.performSelector("searchForText:", withObject: searchString, afterDelay: 0.5)