Google Places Api iOS Tutorial Using Swift 4
import UIKit
import AFNetworking
import CoreLocation
class searchScr: UIViewController,UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var searchTxt: UITextField!
@IBOutlet weak var searchView: UIView!
@IBOutlet weak var searchIMG: UIImageView!
private var responseData:NSMutableData?
private var dataTask:URLSessionDataTask?
private let googleMapsKey = "AIzaSyDg2tlPcoqxx2Q2rfjhsAKS-9j0n3JA_a4"
private let baseURLString = "https://maps.googleapis.com/maps/api/place/autocomplete/json"
@IBOutlet weak var searchTBL: UITableView!
var searchArray = [AnyObject]()
var placeName = [String]()
var urlString = String()
override func viewDidLoad() {
super.viewDidLoad()
self.searchTBL.delegate = self
self.searchTBL.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func textFieldDidBeginEditing(_ textField: UITextField) {
print("did");
searchView.backgroundColor = UIColor.white
searchIMG.image = UIImage(named: "SEARCH1")
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let currentText = textField.text ?? ""
guard let stringRange = Range(range, in: currentText) else { return false }
var updatedText = currentText.replacingCharacters(in: stringRange, with: string)
updatedText = updatedText.replacingOccurrences(of: "[\\[\\]^+<>|]-=$#@", with: "%20", options: .regularExpression, range: nil)
if updatedText.count==0 {
searchTxt.text = ""
}
self.placeName.removeAll()
self.searchArray.removeAll()
self.searchTBL.reloadData()
urlString = "\(baseURLString)?key=\(googleMapsKey)&input=\(updatedText)"
print("url== ",urlString)
googleAutoAPI()
return true;
}
func googleAutoAPI(){
//AIzaSyDg2tlPcoqxx2Q2rfjhsAKS-9j0n3JA_a4
let newStr = urlString .replacingOccurrences(of: " ", with: "%20", options: .literal, range: nil)
print("newStr== ",newStr)
let manager = AFHTTPRequestOperationManager()
manager.post(newStr,
parameters:nil,
success: {
(operation: AFHTTPRequestOperation!,responseObject: Any!) in
print((responseObject as AnyObject).description)
let status = (responseObject as! [String : AnyObject])["status"]
if(status!.isEqual("OK")){
self.searchArray = (responseObject as! [String : AnyObject])["predictions"] as! [AnyObject]
for placeDIc in self.searchArray{
if let cityDict = placeDIc as? NSDictionary {
if let cityplaces = cityDict.value(forKey: "description") {
self.placeName.append(cityplaces as! String)
}
}
}
self.searchTBL.reloadData()
// print("hello==",self.placeName)
}else{
self.placeName.removeAll()
self.searchArray.removeAll()
self.searchTBL.reloadData()
}
},
failure: { (operation: AFHTTPRequestOperation?, error: Any?) in
print(error as Any)
self.alertMethod(Title: "Alert", Message: "Internet Connection Error..!")
}
)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.searchArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
let nameLbl = cell.viewWithTag(100) as? UILabel
nameLbl?.text = self.placeName[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 49
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
addressString = self.placeName[indexPath.row]
print("addressString== ",addressString)
isSaved = true;
let story: UIStoryboard? = storyboard
let view: UIViewController? = story?.instantiateViewController(withIdentifier: "homeScr")
self.view.window?.rootViewController = view
}
@IBAction func homeAction(_ sender: Any) {
let story: UIStoryboard? = storyboard
let view: UIViewController? = story?.instantiateViewController(withIdentifier: "homeScr")
self.view.window?.rootViewController = view
}
@IBAction func cameraAction(_ sender: Any) {
// let story: UIStoryboard? = storyboard
// let view: UIViewController? = story?.instantiateViewController(withIdentifier: "homeScr")
// self.view.window?.rootViewController = view
}
@IBAction func notiActionPressed(_ sender: Any) {
let story: UIStoryboard? = storyboard
let view: UIViewController? = story?.instantiateViewController(withIdentifier: "inBoxScr")
self.view.window?.rootViewController = view
}
@IBAction func profileActionPrssed(_ sender: Any) {
let story: UIStoryboard? = storyboard
let view: UIViewController? = story?.instantiateViewController(withIdentifier: "profileScr")
self.view.window?.rootViewController = view
}
}
Please check the screenshot

Comments
Post a Comment