以相同的方式在GMSAutocomplete中使用textfield而不是searchbar
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以相同的方式在GMSAutocomplete中使用textfield而不是searchbar相关的知识,希望对你有一定的参考价值。
我正在使用谷歌广告自动完成API,我需要添加UITextField而不是UISearchBar具有相同的功能。这是我从https://developers.google.com/places/ios-api/autocomplete获得的UISearchBar的工作代码。我会自己添加textfield和tableview,如果有人帮我从任何搜索关键字获取地址数组。比如从字符串(关键字)到数组(预测的地方)。
import UIKit
import GoogleMaps
class ViewController: UIViewController
var resultsViewController: GMSAutocompleteResultsViewController?
var searchController: UISearchController?
var resultView: UITextView?
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
self.definesPresentationContext = true
extension ViewController: GMSAutocompleteResultsViewControllerDelegate
func resultsController(resultsController: GMSAutocompleteResultsViewController,
didAutocompleteWithPlace place: GMSPlace)
searchController?.active = false
print("Place name: ", place.name)
print("Place address: ", place.formattedAddress!)
func resultsController(resultsController: GMSAutocompleteResultsViewController,
didFailAutocompleteWithError error: NSError)
print("Error: ", error.description)
func didRequestAutocompletePredictionsForResultsController(resultsController: GMSAutocompleteResultsViewController)
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
func didUpdateAutocompletePredictionsForResultsController(resultsController: GMSAutocompleteResultsViewController)
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
整合您的GPA(Google Places API)。 POD文件是:
pod 'GooglePlaces'
pod 'GooglePlacePicker'
pod 'GoogleMaps'
首先,将您的KEY提供给AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
// Override point for customization after application launch.
GMSPlacesClient.provideAPIKey("Your KEY")
return true
首先,采用文本字段和表格视图。然后将这些行添加到ViewController.swift文件中并挂钩textField和tableView,最后运行它。
import UIKit
import GooglePlaces
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource
@IBOutlet weak var PlaceTextField: UITextField!
@IBOutlet weak var tableView: UITableView!
var tableData=[String]()
var fetcher: GMSAutocompleteFetcher?
override func viewDidLoad()
super.viewDidLoad()
self.view.backgroundColor = UIColor.lightGray
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
PlaceTextField.addTarget(self, action: #selector(ViewController.textFieldDidChanged(_:)), for: UIControlEvents.editingChanged)
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
// MARK: -UITextField Action
@objc func textFieldDidChanged(_ textField:UITextField )
print(PlaceTextField.text!)
fetcher?.sourceTextHasChanged(PlaceTextField.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: UITableViewCellStyle.default, reuseIdentifier:"addCategoryCell")
cell.selectionStyle = UITableViewCellSelectionStyle.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
extension ViewController: 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)
如果您使用UITextField和您自己的UITableView代替UISearchController,那么直接使用GMSAutocompleteTableDataSource类会更容易。
GoogleMaps Cocoapod的代码示例之一显示了如何执行此操作。如果您已安装了pod,请在项目的SDKDemoAutocompleteWithTextFieldController
目录中查找文件Pods/GoogleMaps/GoogleMapsSDKDemos/SDKDemos/PlacesSamples
,或运行pod try GoogleMaps
下载示例。
For India Latitude and Longitude and this is a Right Answer A Jellies girl make this Downvote please check the code this is absolutely right answer
//In your View Controller there TextField and TableView Setup
import UIKit
import GooglePlaces
class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet weak var txtField: UITextField!
@IBOutlet weak var table1: UITableView!
var tableData = [String]()
var fetcher: GMSAutocompleteFetcher?
override func viewDidLoad()
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
self.edgesForExtendedLayout = []
let nsBoundsCorner = CLLocationCoordinate2D(latitude: 20.5937, longitude: 78.9629)
let bounds = GMSCoordinateBounds(coordinate: nsBoundsCorner, coordinate: nsBoundsCorner)
let filter = GMSAutocompleteFilter()
filter.type = .establishment
fetcher = GMSAutocompleteFetcher(bounds: bounds, filter: filter)
fetcher?.delegate = self
txtField?.addTarget(self, action: #selector(textFieldDidChange(textField:)),for: .editingChanged)
table1.delegate = self
table1.dataSource = self
self.table1.reloadData()
// Do any additional setup after loading the view.
@objc func textFieldDidChange(textField: UITextField)
fetcher?.sourceTextHasChanged(txtField.text!)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return tableData.count
func numberOfSections(in tableView: UITableView) -> Int
return 1
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
var section = indexPath.section
var row = indexPath.row
let cell1 : UITableViewCell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell1")
cell1.selectionStyle = UITableViewCellSelectionStyle.none
cell1.backgroundColor = UIColor.clear
cell1.contentView.backgroundColor = UIColor.clear
cell1.textLabel?.textAlignment = NSTextAlignment.left
cell1.textLabel?.textColor = UIColor.black
cell1.textLabel?.font = UIFont.systemFont(ofSize: 14.0)
cell1.textLabel?.text = tableData[indexPath.row]
return cell1
// extension TableViewController: GMSAutocompleteFetcherDelegate
//
// func didAutocompleteWithPredictions(predictions: [GMSAutocompletePrediction])
//
// tableData.removeAll()
//
// for prediction in predictions
//
// tableData.append(prediction.attributedPrimaryText.string)
//
//
//
// table1.reloadData()
//
//
//
@IBAction func textField1(_ sender: Any)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
*/
extension TableViewController: GMSAutocompleteFetcherDelegate
func didAutocomplete(with predictions: [GMSAutocompletePrediction])
以上是关于以相同的方式在GMSAutocomplete中使用textfield而不是searchbar的主要内容,如果未能解决你的问题,请参考以下文章
在循环中以编程方式创建具有相同名称的 SKSpriteNodes 上使用 repeatActionForever?
使用 xstate,是不是可以配置一个适用于所有状态并在所有状态和子状态中以相同方式处理的事件?