[英]How to save the places the user enters in the google search bar in a table view?
我有一个使用Google Places SDK中的地点自动完成功能的应用程序,并显示所选城市的天气。 我正在尝试将用户输入保存在表格视图中,以便用户在搜索后可以再次单击它(显示最近搜索的城市)。
我尝试使用UserDefaults保存数据并将其显示在表格视图中,但是它不起作用。
class ChangeCityViewController: UIViewController, GMSAutocompleteResultsViewControllerDelegate, UITableViewDelegate{
weak var delegate : ChangeCityViewControllerDelegate?
var searchHistoryArray : [GMSAutocompleteResultsViewController] = []
@IBOutlet weak var searchHistoryTableView: UITableView!
var resultVC : GMSAutocompleteResultsViewController?
var searchController : UISearchController?
private func setupAutoComplete(){
let resultVC = GMSAutocompleteResultsViewController()
resultVC.delegate = self
let searchController = UISearchController(searchResultsController: resultVC)
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = true
searchController.searchBar.autoresizingMask = .flexibleWidth
searchController.searchBar.searchBarStyle = .minimal
searchController.searchBar.sizeToFit()
navigationItem.titleView = searchController.searchBar
self.definesPresentationContext = true
searchController.modalPresentationStyle = .fullScreen
searchController.searchResultsUpdater = resultVC
self.searchController = searchController
self.resultVC = resultVC
}
这将使用Google搜索栏输入(自动完成后),将其与api数据进行比较,并将其显示在主View Controller中:
func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didAutocompleteWith place: GMSPlace) {
if let city = place.addressComponents?.first(where: { $0.types.contains("locality") })?.name{
delegate?.changeCityViewController(self, didSelectCity: city)
}
self.navigationController?.popViewController(animated: true)
}
func resultsController(_ resultsController: GMSAutocompleteResultsViewController, didFailAutocompleteWithError error: Error) {
// TODO: Handle the error
print("Error: \(error)")
}
这是UserDefaults的设置:
let defaults = UserDefaults.standard
private func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) -> GMSAutocompleteResultsViewController {
searchHistoryTableView.dequeueReusableCell(withIdentifier: "searchCell")
return resultVC!
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.navigationController?.popViewController(animated: true)
}
self.searchHistoryArray.append(self.resultVC!)
self.defaults.set(self.searchHistoryArray, forKey: "searchHistoryArray")
self.searchHistoryTableView.reloadData()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.