【发布时间】:2017-03-17 17:05:12
【问题描述】:
我有一个文本字段,每当 textField 文本更改时,它都会从 API 获取数据,并更新表格。
override func viewDidLoad() {
super.viewDidLoad()
searchTextField.addTarget(self, action: #selector(textFieldDidChange), for: UIControlEvents.editingChanged)
}
func textFieldDidChange() {
let queryString = self.searchTextField.text
SearchWSFacade.getSearchResults(queryString: queryString) {
(error) in
if (error == nil) {
self.tableView.reloadData()
}
}
}
这非常有效,只有当用户输入缓慢时(允许在输入下一个字符之前加载数据)。如果用户输入速度很快,我们就会遇到问题,因为多次调用 reloadData。
如果我在发生先前搜索时取消完成处理程序,则可以解决此问题。我该怎么做呢?还是有更好的解决方案?
【问题讨论】:
-
您可以检查查询字符串是否仍然等于文本字段的文本,如果它们不同则不重新加载表格。
-
@dan 简单而有效的解决方案。很遗憾,我不能接受您的评论作为答案。
-
我的方法是在文本更改时启动计时器(例如 0.5 秒),并在文本再次更改时重新启动计时器。只有当计时器触发时,我才会真正执行搜索操作。
标签: ios completionhandler