swift - 搜索栏过滤表视图 swift 4
问题描述
我会尽量使这一点尽可能清楚。我想实现 UI 搜索栏来过滤 JSON 对象的表格视图。我专门使用具有自动完成搜索功能的 Yelp api。在我的课堂上,我向 UISearchBarDelegate 确认了 - 从一些在线教程中,我相信我必须实现两个协议。1 是“func searchBar(textDidChange)”,另一个我相信是“选定范围按钮索引确实发生了变化”。
在 textdidchange 函数中,我可以通过对自动完成端点进行查询来打印出搜索列表。但是我坚持如何加载这些数据(newBizName 数组),以便在用户键入时结果显示在搜索栏下。这是我第一次实现搜索功能,所以我有点陷入困境,任何帮助将不胜感激。谢谢
// the search bar protocol where i query the yelp endpoint - im able to get the autocomplete results as shown in the print section
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
yelpAPIClient.autocompleteBusinesses(byText: searchText, latitude: Double(Location.sharedInstance.latitude), longitude: Double(Location.sharedInstance.longitude), locale: CDYelpLocale.english_unitedStates) { (response) in
if let response = response,
let businesses = response.businesses,
businesses.count > 0 {
for business in (response.businesses)! {
self.filteredBusinesses.append(business.name!)
}
self.yelpTableView.reloadData()
}
self.newBizName = self.filteredBusinesses
print(self.newBizName)
//prints after pressing P - ["Panera Bread", "Popeyes Louisiana Kitchen", "P.F. Chang\'s"]
}
}
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
}
func isFiltering() -> Bool {
return searchController.isActive && !searchBarIsEmpty()
}
// THE ORIGINAL TABLE VIEW THAT APPEARS UPON VIEW LOADING.
//I NEED TO GET THE FILTERED RESULTS INTO
//THIS AREA AFTER THE USER CLICKS ONTO THE SEARCH BAR
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (self.nameArray.count)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "YelpCell") as? YelpCell else { return UITableViewCell() }
cell.YelpNameLbl.text = nameArray[indexPath.row]
cell.yelpAddressLbl.text = locationArray[indexPath.row]
cell.yelpImg.downloadedFrom(url: yelpURLS[indexPath.row]!)
cell.yelpDollarSignLbl.text = yelpDollarsSigns[indexPath.row]
cell.distanceFromYou.text = String(format: "%.2f", distanceFromYou[indexPath.row]!)
return cell
}
解决方案
我认为您需要像这样重新加载表:
DispatchQueue.main.async {
self.yelpTableView.reloadData()
}
推荐阅读
- python - 如何在构建我的 python 项目时包含 nltk 数据?
- java - 在 dropwizard 应用程序中集成 Audit4J
- android - 主动跟踪任务示例在 Mavic Air 中不起作用
- amazon-web-services - Cognito - 导入用户后未发送电子邮件
- elasticsearch - 我应该如何在 Elastic Search 中索引数据库表
- asp.net - 如何为我的客户制作 Visual Studio 2015 网站安装程序?
- php - Laravel 5.6 自定义规则验证
- django - 如何将 django local 与 heroku 中的 postgress 连接起来
- angular - 自定义路线在 Angular 中不起作用
- reactjs - 使用 defaultProps 时打字稿不发出枚举导入