2017-02-26 45 views
0

我創建在Xcode一個應用程序,將在地圖視圖,允許用戶從列表中選擇一個酥料餅的屏幕在Xcode在一個UITableView用戶的當前位置附近的地方列表根據當前位置在附近的位置。我嘗試了幾種方法來做到這一點,但還沒有完成。我對編碼相對比較陌生,Google Places文檔對我來說有點太模糊。顯示器的使用谷歌Places API的

話雖這麼說,我已經有了谷歌的地方實現(下載,鏈接,API密鑰等),所以我只是想找到顯示在列表視圖附近的地點以正確的方式。我正在使用Swift創建這個。這裏是我到目前爲止,因此,如果它是一個爛攤子:

import UIKit 
import GooglePlaces 

class ViewController: UIViewController, UITableViewDataSource { 

    var placesClient: GMSPlacesClient! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.nearbyPlaces() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func nearbyPlaces() { 
     placesClient.currentPlace(callback: { (placeLikelihoodList, error) -> Void in 
      if let error = error { 
       print("Pick Place error: \(error.localizedDescription)") 
       return 
      } 

      if let placeLikelihoodList = placeLikelihoodList { 
       for likelihood in placeLikelihoodList.likelihoods { 
        let place = likelihood.place 
       } 
      } 
     }) 
    } 

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     var cell = UITableViewCell() 
     cell.textLabel?.text = "Test" 
     return cell 
    } 
} 

回答

1

你實際上是接近的解決方案,

  1. 創建的tableview參考
  2. 的出口保持結果創建一個變量likeHoodListGMSPlacesClient 請求。
  3. GMSPlacesClient回調完成,結果存儲在likeHoodList和 重裝的tableview。
  4. 不要忘記更改cellForRowAt寫地名等,以及地方 計數是你的tableview行計數。
  5. 在回調參數placeLikelihoodList是 GMSPlaceLikelihoodList參考。
  6. GMSPlaceLikelihoodList有兩個屬性的似然性和 歸因
  7. 似然性是GMSPlaceLikelihood
  8. GMSPlaceLikelihood陣列具有兩個屬性,地點和似然
  9. 地點是GMSPlace參考,其具有關於 地方等名稱的屬性, placaeID,座標等

這裏是一個完整的解決方案,

import UIKit 
import GooglePlaces 

class ViewController: UIViewController, UITableViewDataSource { 

    var placesClient: GMSPlacesClient! 
    var likeHoodList: GMSPlaceLikelihoodList? 
    @IBOutlet var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.nearbyPlaces() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func nearbyPlaces() { 
     placesClient.currentPlace(callback: { (placeLikelihoodList, error) -> Void in 
      if let error = error { 
       print("Pick Place error: \(error.localizedDescription)") 
       return 
      } 

      if let placeLikelihoodList = placeLikelihoodList { 
       likeHoodList = placeLikelihoodList 
       tableView.reloadData() 
      } 
     }) 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if let likeHoodList = likeHoodList { 
      return likeHoodList.likehoods.count 
     } 
     return 0 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     var cell = UITableViewCell() 
     var place = likeHoodList.likelihoods[indextPath.row].place //this is a GMSPlace object 
     //https://developers.google.com/places/ios-api/reference/interface_g_m_s_place 
     cell.textLabel?.text = place.name 
     return cell 
    } 
} 

更新

看來你沒有初始化委託,改變的viewDidLoad這樣,

override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.dataSource = self 
     self.nearbyPlaces() 
    } 
+0

謝謝!這很棒!我遇到的唯一問題是使用「place.name」值填充表格。它返回錯誤:類型'GMSPlaceLikelihood?'的值沒有成員的名字 –

+0

@ M.Spencer,是的,這是我的不好,它應該是'var place = likeHoodList.likelihoods [indextPath.row] .place',更新了我的答案。 – ocanal

+0

真棒迴應!不幸的是,它似乎還沒有填充...我沒有任何錯誤,但列表仍然是空白的,我敢肯定這是一個愚蠢的錯誤,我正在 –

相關問題