user1889692
user1889692

Reputation:

Google Places Autocomplete API Does not Populate the exact address in my Tableview

I am using google Place Autocomplete API, i have the UITextField instead of UISearchBar with the same functionality; I am having the search estimates to be populated in a tableView. However, the results dont show the exact address; instead it only shows name of places. How can I make it so the results in the tableview are the exact address instead of places name?

Here is my code:

class DeliveryAddressVC: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var streetTextField: UITextField!
    @IBAction func searchTextClicked(_ sender: Any) {}
    @IBOutlet weak var tableView: UITableView!


    var tableData=[String]()
    var fetcher: GMSAutocompleteFetcher?

    override func viewDidLoad() {
        super.viewDidLoad()

        if streetTextField.text == "" {
                tableView.isHidden = true
        }

        self.edgesForExtendedLayout = []

        // Set bounds to inner-west Sydney Australia.
        let neBoundsCorner = CLLocationCoordinate2D(latitude: -33.843366,
                                                    longitude: 151.134002)
        let swBoundsCorner = CLLocationCoordinate2D(latitude: -33.875725,
                                                    longitude: 151.200349)
        let bounds = GMSCoordinateBounds(coordinate: neBoundsCorner,
                                         coordinate: swBoundsCorner)

        // Set up the autocomplete filter.
        let filter = GMSAutocompleteFilter()
        filter.type = .establishment

        // Create the fetcher.
        fetcher = GMSAutocompleteFetcher(bounds: bounds, filter: filter)
        fetcher?.delegate = self as GMSAutocompleteFetcherDelegate

        streetTextField.addTarget(self, action: #selector(DeliveryAddressVC.textFieldDidChanged(_:)), for: UIControl.Event.editingChanged)

        tableView.delegate = self
        tableView.dataSource = self

        tableView.reloadData()
    }

    // MARK: -UITextField Action

    @objc func textFieldDidChanged(_ textField:UITextField ){

        if streetTextField.text == "" {
            tableView.isHidden = true
        }else {
        tableView.isHidden = false
        }
        fetcher?.sourceTextHasChanged(streetTextField.text!)
    }

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

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        var section = indexPath.section

        var row = indexPath.row

        let cell: UITableViewCell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier:"addCategoryCell")

        cell.selectionStyle =  UITableViewCell.SelectionStyle.none
        cell.backgroundColor = UIColor.clear
        cell.contentView.backgroundColor = UIColor.clear
        cell.textLabel?.textAlignment = NSTextAlignment.left
        cell.textLabel?.textColor = UIColor.black
        cell.textLabel?.font = UIFont.systemFont(ofSize: 14.0)

        cell.textLabel?.text = tableData[indexPath.row]
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.isHidden = true
    }



}
extension DeliveryAddressVC: GMSAutocompleteFetcherDelegate {
    func didAutocomplete(with predictions: [GMSAutocompletePrediction]) {
        tableData.removeAll()

        for prediction in predictions {

            tableData.append(prediction.attributedPrimaryText.string)

            //print("\n",prediction.attributedFullText.string)
            //print("\n",prediction.attributedPrimaryText.string)
            //print("\n********")
        }

        tableView.reloadData()
    }

    func didFailAutocompleteWithError(_ error: Error) {
        print(error.localizedDescription)
    }


}

Upvotes: 0

Views: 408

Answers (1)

user1889692
user1889692

Reputation:

Found the solution; I had to change two lines in my code:

Changed this: filter.type = .establishment

To: filter.type = .address

AND

This: tableData.append(prediction.attributedPrimaryText.string)

To: tableData.append(prediction.attributedFullText.string)

Upvotes: 2

Related Questions