iOS:等到用户完成input然后发送请求
我有一个简单的UITableView与UISearchBar / UISearchDisplayController通过使用RKObjectManager从远程ElasticSearch服务器获取结果。 我遇到的问题是,如果用户键入的速度很快,或者术语稍微大点,那么有些请求会失败,有时我不会得到结果。
有没有一个select, 等到用户停止input ,然后发送请求,而不是发送每个他所键入的每个字母的请求?
在发送请求之前添加一个小的延迟,如果用户继续input,则取消延迟的请求
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [NSObject cancelPreviousPerformRequestsWithTarget:self]; [self performSelector:@selector(sendSearchRequest) withObject:searchText afterDelay:0.1f]; }
您可能需要调整延迟时间。 太长,对用户来说显而易见的是有一个延迟,太短,你现在有同样的问题
这是快速版本
NSObject.cancelPreviousPerformRequestsWithTarget(self) self.performSelector("searchForText:", withObject: searchString, afterDelay: 0.5)