Я постараюсь сделать это как можно более понятным. Я хочу реализовать панель поиска пользовательского интерфейса для фильтрации табличного представления объектов 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
}