繁体   English   中英

如何在表格视图中保存用户在google搜索栏中输入的位置?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM