Google自动完成未填充TableView

时间:2018-12-28 11:41:49

标签: swift google-maps google-places gmsautocomplete

我正在使用Google自动完成搜索地址。我在控制台中得到结果,但是,这并没有填充到TableView中。

  • 重新加载表格时我在主队列中。
  • 我正在打印结果中的对象数量。

SearchResultsController

extension ResultsController: UISearchResultsUpdating, UISearchControllerDelegate {

    func updateSearchResults(for searchController: UISearchController) {
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.searchBar.autocorrectionType = .yes
        if searchController.isActive {
            searchController.searchResultsController?.view.isHidden = false
        }
        if searchController.searchBar.text == "" {
            self.searchResults.removeAll()
        } else {
            guard let query = searchController.searchBar.text else { return }
            GMSPlacesClient.shared().autocompleteQuery(query, bounds: nil, filter: self.filteredResults) { (results, error) in
                if error != nil {
                    print(error as Any)
                    return
                } else {
                    guard let results = results else { return }
                    self.searchResults.append(contentsOf: results)
                    print(self.searchResults)
                }
            }
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }

    func didDismissSearchController(_ searchController: UISearchController) {
        searchResults.removeAll()
    }
}

TableView

extension ResultsController: UITableViewDelegate, UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return searchResults.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let resultsCell = tableView.dequeueReusableCell(withIdentifier: resultsCellIdentifier, for: indexPath)
        let resultsAttributedFullText = searchResults[indexPath.row].attributedFullText.string
        resultsCell.textLabel?.text = resultsAttributedFullText
        return resultsCell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        view.endEditing(true)
    }

控制台输出

[GMSAutocompletePrediction 0x60000053d6e0: "Whittier Boulevard, Whittier, CA, USA", id: EiVXaGl0dGllciBCb3VsZXZhcmQsIFdoaXR0aWVyLCBDQSwgVVNBIi4qLAoUChIJ988tx8bTwoARp1jTzq6WINISFAoSCfeHelWG08KAEVokQMFHfagn, types: (
    route,
    geocode
), GMSAutocompletePrediction 0x60000053f150: "Whitehorse Road, Balwyn VIC, Australia", id: EiZXaGl0ZWhvcnNlIFJvYWQsIEJhbHd5biBWSUMsIEF1c3RyYWxpYSIuKiwKFAoSCREWtq2qQNZqEQJK4PmVuEWbEhQKEglDvWU1O0HWahEw2IwhdVYEBQ, types: (
    route,
    geocode
), GMSAutocompletePrediction 0x600000532280: "Whiteman Street, Southbank VIC, Australia", id: EilXaGl0ZW1hbiBTdHJlZXQsIFNvdXRoYmFuayBWSUMsIEF1c3RyYWxpYSIuKiwKFAoSCe96AVJUXdZqEeCPutYFxDBlEhQKEgkP4YsKRV3WahHA_owhdVYEBQ, types: (
    route,
    geocode
), GMSAutocompletePrediction 0x600000531d40: "Whitechapel Road, London, UK", id: EhxXaGl0ZWNoYXBlbCBSb2FkLCBMb25kb24sIFVLIi4qLAoUChIJtVKaXcwcdkgR-UK_lKqNnh0SFAoSCamRx0IRO1oCEXoliDJDoPjE, types: (
    route,
    geocode
), GMSAutocompletePrediction 0x600000532400: "Whitehouse Lane, Yeadon, Leeds, UK", id: EiJXaGl0ZWhvdXNlIExhbmUsIFllYWRvbiwgTGVlZHMsIFVLIi4qLAoUChIJX11vv3ZYeUgR7a_1SItTcAgSFAoSCb1BkiJ1WHlIEdu33wgccaPf, types: (
    route,
    geocode
)]

任何帮助都将不胜感激。

更新

Break point output on .reloadData()

以上是tableView上.reloadData()的断点。
因此,将重新加载表,并使用结果填充数组。问题是由于某些原因未调用cellForRowAtIndex!?

1 个答案:

答案 0 :(得分:-1)

您不需要添加表视图 请检查以下代码

import GooglePlaces
import GoogleMaps

class DirectionsViewController: UIViewController, GMSAutocompleteViewControllerDelegate {

    let filter = GMSAutocompleteFilter()

    override func viewDidLoad() {
        super.viewDidLoad()
        txfFromLocation.addTarget(self, action: #selector(autocompleteClicked), for: .editingDidBegin)
    }

    @objc func autocompleteClicked (sender:UITextField!){
        let autocompleteController = GMSAutocompleteViewController()
        autocompleteController.delegate = self
        present(autocompleteController, animated: true, completion: nil)
    }

    //MARK:- GMSAUTOCOMPLETEDELEGATES
    // Handle the user's selection.
    func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
        print("Place name: \(place.name)")
        dismiss(animated: true, completion: nil)
    }
}