2016-07-25 39 views
0

我正在使用搜索欄來使用Google地方自動完成功能。但是,當我將搜索欄放在GMSMapView之上時,它不起作用。當我註釋掉loadView()函數時,它工作得很好。有沒有辦法在Google地圖上使用地方自動完成功能?上述Swift谷歌地方自動完成功能無法使用Google地圖

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/maphttps://developers.google.com/places/ios-api/autocomplete。我複製這些測試,但仍然無法正常工作。

回答

1

對不起,我沒有寫評論的聲望,但我認爲這可以幫助你找出問題。

首先調用super.loadView(),當初始化GMSMapView時,您必須設置一個幀大小。最後將mapView添加到子視圖。

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上使用硬編碼的幀大小,而不是嘗試使用自動佈局 – Juan

相關問題