iOS:等待用户完成输入后再发送请求

6
我有一个简单的带有UISearchBar/UISearchDisplayController的UITableView,使用RKObjectManager从远程ElasticSearch服务器获取结果。问题是,如果用户输入速度过快或术语较长,则会出现多个请求失败的情况,有时我无法得到结果。
是否有选项可以等待用户停止输入后再发送请求,而不是每输入一个字母就发送一次请求?
2个回答

24

在发送请求之前添加一个小延迟,如果用户继续输入,则取消该延迟的请求。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];

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

你可能需要调整延迟时间。太长了会让用户注意到有延迟,太短了会出现和现在同样的问题。


有没有想过如何在Swift中实现这个? - Ram Y
@Ram 我已经使用这里建议的答案作为在Swift中缺少performSelector的解决方法:https://dev59.com/tmAf5IYBdhLWcg3w52A_ - wattson12

8
这是针对 Swift 版本的内容。
NSObject.cancelPreviousPerformRequestsWithTarget(self)
self.performSelector("searchForText:", withObject: searchString, afterDelay: 0.5)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接