2016-07-25 2 views
0

Я использую панель поиска для использования функции автозаполнения Google Place. Однако он не работает, когда я помещаю панель поиска поверх GMSMapView. Он отлично работает, когда я комментирую функцию loadView(). Есть ли способ использовать автозаполнение места с картой Google?Swift Google Place Автозаполнение не работает с Google Maps

import UIKit 
import GoogleMaps 

class ViewController: UIViewController { 

    var resultsViewController: GMSAutocompleteResultsViewController? 
    var searchController: UISearchController? 
    var resultView: UITextView? 

    override func loadView() { 
    let camera = GMSCameraPosition.cameraWithLatitude(1.285, longitude: 103.848, zoom: 12) 
    let mapView = GMSMapView.mapWithFrame(.zero, camera: camera) 
    self.view = mapView 
    } 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    resultsViewController = GMSAutocompleteResultsViewController() 
    resultsViewController?.delegate = self 

    searchController = UISearchController(searchResultsController: resultsViewController) 
    searchController?.searchResultsUpdater = resultsViewController 

    let subView = UIView(frame: CGRectMake(0, 65.0, 350.0, 45.0)) 

    subView.addSubview((searchController?.searchBar)!) 
    self.view.addSubview(subView) 
    searchController?.searchBar.sizeToFit() 
    searchController?.hidesNavigationBarDuringPresentation = false 

    // When UISearchController presents the results view, present it in 
    // this view controller, not one further up the chain. 
    self.definesPresentationContext = true 
    } 
} 

// Handle the user's selection. 
extension ViewController: GMSAutocompleteResultsViewControllerDelegate { 
    func resultsController(resultsController: GMSAutocompleteResultsViewController, 
    didAutocompleteWithPlace place: GMSPlace) { 
     searchController?.active = false 
     // Do something with the selected place. 
     print("Place name: ", place.name) 
     print("Place address: ", place.formattedAddress) 
     print("Place attributions: ", place.attributions) 
    } 

    func resultsController(resultsController: GMSAutocompleteResultsViewController, 
    didFailAutocompleteWithError error: NSError){ 
     // TODO: handle the error. 
     print("Error: ", error.description) 
    } 

    // Turn the network activity indicator on and off again. 
    func didRequestAutocompletePredictionsForResultsController(resultsController: GMSAutocompleteResultsViewController) { 
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true 
    } 

    func didUpdateAutocompletePredictionsForResultsController(resultsController: GMSAutocompleteResultsViewController) { 
    UIApplication.sharedApplication().networkActivityIndicatorVisible = false 
    } 
} 

Код выше от https://developers.google.com/maps/documentation/ios-sdk/map и https://developers.google.com/places/ios-api/autocomplete. Я скопировал их для тестирования и до сих пор не работает.

ответ

1

Извините, у меня пока нет репутации, чтобы написать комментарии, но я думаю, что это поможет вам разобраться в проблеме.

Сначала вызовите super.loadView(), и при инициализации GMSMapView вы должны установить размер кадра. Наконец добавьте mapView в subview.

override func loadView() { 

    super.loadView() 

    let camera = GMSCameraPosition.cameraWithLatitude(1.285, longitude: 103.848, zoom: 12) 
    let mapView = GMSMapView.mapWithFrame(self.view.frame, camera: camera) 
    self.view.addSubview(mapView) 
    } 
+0

Спасибо за ваш ответ, но он по-прежнему не работает –

+0

Я отредактировал ответ с помощью решения. – Juan

+0

Другое дело, избегайте использования жесткого кодированного размера кадра на UIView, вместо этого попробуйте использовать autolayout – Juan

Смежные вопросы