2016-01-23 3 views
1

Я пытаюсь реализовать Google помещает автозаполнения АФИ в быстром проекте 2.0, используя следующую библиотеку:Google Адресов автозаполнения ИОС стремительные интеграции с UITextField

https://github.com/watsonbox/ios_google_places_autocomplete

единственное, что я нахожусь не в состоянии выяснить, что я хочу интегрировать это с uitextfield, присутствующим в моей форме приложения, в которой есть поля страны и города.

Я внедрил это приложение в демонстрационный проект и выяснил, что он также предоставляет мне длинную длину.

Пожалуйста, помогите мне, направляя меня интегрировать эту библиотеку с uitextfield так, когда пользователем вводит в uitextfield результатах приведены ниже только uitextfield.

Сотрудничая реализовать код в демонстрационном приложении я пришел узнать, что SearchBox открывается с помощью следующего кода:

let gpaViewController = GooglePlacesAutocomplete(
     apiKey: "API KEY FROM GOOGLE PLACES API", 
     placeType: .Address 
    ) 

Я не могу понять, как получить эту viewcontroller функциональность работы на мой uitextfield поэтому он может работать точно так же, как он работает на uitextfield

+0

Вы сделали это с текстовым полем в swift? если это так, я также ищу то же самое, можете ли вы предоставить образец, если это возможно, спасибо! –

ответ

3

Почему не использовать API Google Places для iOS? Он обладает всеми возможностями, которые видны в упомянутой библиотеке. Вот ссылка https://developers.google.com/places/ios-api/autocomplete

и вы можете использовать объект-получатель для получения прогнозов и согласно любому требованию вы можете настроить результат. Надеюсь, что это помогает

1

Google автозаполнения API с помощью строки поиска

1)

let googleAutoCompeteApi = "https://maps.googleapis.com/maps/api/place/autocomplete/json?input=%@&types=establishment|geocode&location=%@,%@&radius=500&language=en&key=%@" 
var arrPlaces = NSMutableArray(capacity: 100) 
let operationQueue = NSOperationQueue() 
let googleServerkey = "Your API KEY" 

2)

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
     self.beginSearching(searchText) 
    } 

    func beginSearching(searchText:String) { 
     if searchText.characters.count == 0 { 
      self.arrPlaces.removeAllObjects() 
      self.tblOfflineCity.reloadData() 
      return 
     } 

     operationQueue.addOperationWithBlock {() -> Void in 
      self.forwardGeoCoding(searchText) 
     } 
    } 

    //MARK: - Search place from Google - 
    func forwardGeoCoding(searchText:String) { 
     googlePlacesResult(searchText) { (result) -> Void in 
      let searchResult:NSDictionary = ["keyword":searchText,"results":result] 
      if result.count > 0 
      { 
       let features = searchResult.valueForKey("results") as! [AnyObject] 
       self.arrPlaces = NSMutableArray(capacity: 100) 
       for dictAddress in features { 
        self.arrPlaces.addObject(dictAddress.valueForKey("description")!) 
       } 
       dispatch_async(dispatch_get_main_queue(), { 
        self.tblOfflineCity.reloadData() 
       }); 
      } 
     } 
    } 

    //MARK: - Google place API request - 
    func googlePlacesResult(input: String, completion: (result: NSArray) -> Void) { 
     let searchWordProtection = input.stringByReplacingOccurrencesOfString(" ", withString: "") 
     if searchWordProtection.characters.count != 0 { 
      let urlString = NSString(format: googleAutoCompeteApi,input,currentLat,currentLong,googleServerkey) 
      let url = NSURL(string: urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!) 
      let defaultConfigObject = NSURLSessionConfiguration.defaultSessionConfiguration() 
      let delegateFreeSession = NSURLSession(configuration: defaultConfigObject, delegate: nil, delegateQueue: NSOperationQueue.mainQueue()) 
      let request = NSURLRequest(URL: url!) 
      let task = delegateFreeSession.dataTaskWithRequest(request, 
                   completionHandler: { 
                    (data, response, error) -> Void in 
                    if let data = data { 

                     do { 
                      let jSONresult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as! [String:AnyObject] 
                      let results:NSArray = jSONresult["predictions"] as! NSArray 
                      let status = jSONresult["status"] as! String 

                      if status == "NOT_FOUND" || status == "REQUEST_DENIED" { 

                       let userInfo:NSDictionary = ["error": jSONresult["status"]!] 
                       let newError = NSError(domain: "API Error", code: 666, userInfo: userInfo as [NSObject : AnyObject]) 
                       let arr:NSArray = [newError] 
                       completion(result: arr) 
                       return 
                      } else { 
                       completion(result: results) 
                      } 
                     } 
                     catch { 
                      print("json error: \(error)") 
                     } 
                    } else if let error = error { 
                     print(error.description) 
                    } 
      }) 
      task.resume() 
     } 
    } 

вы получите результат в self.arrPlaces , Чтобы использовать только в uitextField, вам нужно вызвать функцию, используя делегат uitextField вместо поиска.

+0

Где методы делегата таблицы, bro? –

+0

Когда я выбираю одно место, значит, что произошло дальше. Можете ли вы предоставить делегат таблицы для того, чтобы выбрать строку bro? –

+1

функ Tableview (Tableview: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { печать (! ArrPlaces.objectAtIndex (indexPath.row) в качестве строки) } необходимо использовать ** ** arrPlaces массив для отображения данных в Tableview –