ios – Google自动填充教程为swift提供了api

前端之家收集整理的这篇文章主要介绍了ios – Google自动填充教程为swift提供了api前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想有一个自动完成文本字段,为我自动填充位置,如 android的那个:

https://developers.google.com/places/training/autocomplete-android

有谁知道我在哪里可以找到这个或一个例子的教程?

谢谢!

解决方法

脚步 :

>在swift项目中添加Alamofire CocoaPods.
>在Google API控制台上查找您的Google地方API密钥.
>添加以下代码

ViewController.swift

  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4. override func viewDidAppear(animated: Bool) {
  5. super.viewDidAppear(animated)
  6.  
  7. let gpaViewController = GooglePlacesAutocomplete(
  8. apiKey: "YOUR GOOGLE PLACE API KEY",placeType: .Address
  9. )
  10.  
  11. gpaViewController.placeDelegate = self
  12.  
  13. presentViewController(gpaViewController,animated: true,completion: nil)
  14. }
  15. }
  16.  
  17. extension ViewController: GooglePlacesAutocompleteDelegate {
  18. func placeSelected(place: Place) {
  19. println(place.description)
  20. }
  21.  
  22. func placeViewClosed() {
  23. dismissViewControllerAnimated(true,completion: nil)
  24. }
  25. }

GooglePlacesAutocomplete.swift

  1. import UIKit
  2. import Alamofire
  3.  
  4. enum PlaceType: Printable {
  5. case All
  6. case Geocode
  7. case Address
  8. case Establishment
  9. case Regions
  10. case Cities
  11.  
  12. var description : String {
  13. switch self {
  14. case .All: return ""
  15. case .Geocode: return "geocode"
  16. case .Address: return "address"
  17. case .Establishment: return "establishment"
  18. case .Regions: return "regions"
  19. case .Cities: return "cities"
  20. }
  21. }
  22. }
  23.  
  24. struct Place {
  25. let id: String
  26. let description: String
  27. }
  28.  
  29. protocol GooglePlacesAutocompleteDelegate {
  30. func placeSelected(place: Place)
  31. func placeViewClosed()
  32. }
  33.  
  34. // MARK: - GooglePlacesAutocomplete
  35. class GooglePlacesAutocomplete: UINavigationController {
  36. var gpaViewController: GooglePlacesAutocompleteContainer?
  37.  
  38. var placeDelegate: GooglePlacesAutocompleteDelegate? {
  39. get { return gpaViewController?.delegate }
  40. set { gpaViewController?.delegate = newValue }
  41. }
  42.  
  43. convenience init(apiKey: String,placeType: PlaceType = .All) {
  44. let gpaViewController = GooglePlacesAutocompleteContainer(
  45. apiKey: apiKey,placeType: placeType
  46. )
  47.  
  48. self.init(rootViewController: gpaViewController)
  49. self.gpaViewController = gpaViewController
  50.  
  51. let closeButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop,target: self,action: "close")
  52.  
  53. gpaViewController.navigationItem.leftBarButtonItem = closeButton
  54. gpaViewController.navigationItem.title = "Enter Address"
  55. }
  56.  
  57. func close() {
  58. placeDelegate?.placeViewClosed()
  59. }
  60. }
  61.  
  62. // MARK: - GooglePlaceSearchDisplayController
  63. class GooglePlaceSearchDisplayController: UISearchDisplayController {
  64. override func setActive(visible: Bool,animated: Bool) {
  65. if active == visible { return }
  66.  
  67. searchContentsController.navigationController?.navigationBarHidden = true
  68. super.setActive(visible,animated: animated)
  69.  
  70. searchContentsController.navigationController?.navigationBarHidden = false
  71.  
  72. if visible {
  73. searchBar.becomeFirstResponder()
  74. } else {
  75. searchBar.resignFirstResponder()
  76. }
  77. }
  78. }
  79.  
  80. // MARK: - GooglePlacesAutocompleteContainer
  81. class GooglePlacesAutocompleteContainer: UIViewController {
  82. var delegate: GooglePlacesAutocompleteDelegate?
  83. var apiKey: String?
  84. var places = [Place]()
  85. var placeType: PlaceType = .All
  86.  
  87. convenience init(apiKey: String,placeType: PlaceType = .All) {
  88. self.init(nibName: "GooglePlacesAutocomplete",bundle: nil)
  89. self.apiKey = apiKey
  90. self.placeType = placeType
  91. }
  92.  
  93. override func viewDidLoad() {
  94. super.viewDidLoad()
  95.  
  96. let tv: UITableView? = searchDisplayController?.searchResultsTableView
  97. tv?.registerClass(UITableViewCell.self,forCellReuseIdentifier: "Cell")
  98. }
  99. }
  100.  
  101. // MARK: - GooglePlacesAutocompleteContainer (UITableViewDataSource / UITableViewDelegate)
  102. extension GooglePlacesAutocompleteContainer: UITableViewDataSource,UITableViewDelegate {
  103. func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
  104. return places.count
  105. }
  106.  
  107. func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  108. let cell = self.searchDisplayController?.searchResultsTableView?.dequeueReusableCellWithIdentifier("Cell",forIndexPath: indexPath) as UITableViewCell
  109.  
  110. // Get the corresponding candy from our candies array
  111. let place = self.places[indexPath.row]
  112.  
  113. // Configure the cell
  114. cell.textLabel.text = place.description
  115. cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
  116.  
  117. return cell
  118. }
  119.  
  120. func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) {
  121. delegate?.placeSelected(self.places[indexPath.row])
  122. }
  123. }
  124.  
  125. // MARK: - GooglePlacesAutocompleteContainer (UISearchDisplayDelegate)
  126. extension GooglePlacesAutocompleteContainer: UISearchDisplayDelegate {
  127. func searchDisplayController(controller: UISearchDisplayController,shouldReloadTableForSearchString searchString: String!) -> Bool {
  128. getPlaces(searchString)
  129. return false
  130. }
  131.  
  132. private func getPlaces(searchString: String) {
  133. Alamofire.request(.GET,"https://maps.googleapis.com/maps/api/place/autocomplete/json",parameters: [
  134. "input": searchString,"type": "(\(placeType.description))","key": apiKey ?? ""
  135. ]).responseJSON { request,response,json,error in
  136. if let response = json as? NSDictionary {
  137. if let predictions = response["predictions"] as? Array<AnyObject> {
  138. self.places = predictions.map { (prediction: AnyObject) -> Place in
  139. return Place(
  140. id: prediction["id"] as String,description: prediction["description"] as String
  141. )
  142. }
  143. }
  144. }
  145.  
  146. self.searchDisplayController?.searchResultsTableView?.reloadData()
  147. }
  148. }
  149. }

GooglePlacesAutocomplete.xib

希望这会有助于他人.

猜你在找的iOS相关文章