Vous êtes prêt !

Pour passer à l'étape de développement, accédez à notre documentation pour les développeurs.

Activer Google Places API for iOS

Pour commencer, nous allons vous guider à travers la console Google Developers et effectuer deux ou trois petites choses :

  1. Créer ou choisir un projet
  2. Activer Google Places API for iOS
  3. Créer les clés appropriées
Continuer

Place Autocomplete

Le service Autocomplete (saisie semi-automatique) dans Google Places API for iOS renvoie des lieux possibles en réponse à une requête de recherche de l'utilisateur. Lors de la frappe, le service de saisie semi-automatique renvoie des suggestions de lieux tels que des établissements, des adresses et des points d'intérêt.

Vous pouvez ajouter Autocomplete à votre application de plusieurs façons :

Ajouter une commande d'interface utilisateur Autocomplete

La commande d'interface utilisateur Autocomplete est une zone de recherche avec une fonctionnalité de saisie semi-automatique intégrée. Lorsque l'utilisateur saisit des termes de recherche, la commande lui présente une liste de lieux possibles à choisir. Lorsque l'utilisateur choisit une option, une instance GMSPlace est renvoyée. Votre application peut alors l'utiliser pour obtenir des informations détaillées sur le lieu sélectionné.

Pour ajouter la commande d'interface utilisateur Autocomplete à votre application, vous pouvez :

Ajouter une commande plein écran

Utilisez la commande plein écran pour bénéficier d'un contexte modal, où l'interface utilisateur de saisie semi-automatique remplace temporairement celle de votre application jusqu'à ce que l'utilisateur ait fait son choix. Cette fonctionnalité est fournie par la classe GMSAutocompleteViewController . Lorsque l'utilisateur sélectionne un lieu, votre application reçoit un rappel.

Pour ajouter une commande plein écran à votre application :

  1. Créez un élément d'interface utilisateur dans votre application principale pour lancer la commande d'interface utilisateur Autocomplete, par exemple un gestionnaire tactile sur un UIButton.
  2. Implémentez le protocole GMSAutocompleteViewControllerDelegate dans le contrôleur d'affichage parent.
  3. Créez une instance de GMSAutocompleteViewController et affectez le contrôleur d'affichage parent en tant que propriété déléguée.
  4. Présentez le GMSAutocompleteViewController en utilisant [self presentViewController...].
  5. Gérez la sélection de l'utilisateur dans la méthode déléguée didAutocompleteWithPlace.
  6. Annulez le contrôleur dans les méthodes déléguées didAutocompleteWithPlace, didFailAutocompleteWithError et wasCancelled.

L'exemple suivant présente une façon possible de lancer GMSAutocompleteViewController en réponse à un toucher de l'utilisateur sur un bouton.

Swift

import UIKit
import GooglePlaces

class ViewController: UIViewController {

  // Present the Autocomplete view controller when the button is pressed.
  @IBAction func autocompleteClicked(_ sender: UIButton) {
    let autocompleteController = GMSAutocompleteViewController()
    autocompleteController.delegate = self
    present(autocompleteController, animated: true, completion: nil)
  }
}

extension ViewController: GMSAutocompleteViewControllerDelegate {

  // Handle the user's selection.
  func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
    print("Place name: \(place.name)")
    print("Place address: \(place.formattedAddress)")
    print("Place attributions: \(place.attributions)")
    dismiss(animated: true, completion: nil)
  }

  func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
    // TODO: handle the error.
    print("Error: ", error.localizedDescription)
  }

  // User canceled the operation.
  func wasCancelled(_ viewController: GMSAutocompleteViewController) {
    dismiss(animated: true, completion: nil)
  }

  // Turn the network activity indicator on and off again.
  func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = true
  }

  func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
  }

}

Objective-C

#import "ViewController.h"
#import <GooglePlaces/GooglePlaces.h>

@interface ViewController () <GMSAutocompleteViewControllerDelegate>

@end

@implementation ViewController

...

// Present the autocomplete view controller when the button is pressed.
- (IBAction)onLaunchClicked:(id)sender {
  GMSAutocompleteViewController *acController = [[GMSAutocompleteViewController alloc] init];
  acController.delegate = self;
  [self presentViewController:acController animated:YES completion:nil];
}

// Handle the user's selection.
- (void)viewController:(GMSAutocompleteViewController *)viewController
didAutocompleteWithPlace:(GMSPlace *)place {
  [self dismissViewControllerAnimated:YES completion:nil];
  // Do something with the selected place.
  NSLog(@"Place name %@", place.name);
  NSLog(@"Place address %@", place.formattedAddress);
  NSLog(@"Place attributions %@", place.attributions.string);
}

- (void)viewController:(GMSAutocompleteViewController *)viewController
didFailAutocompleteWithError:(NSError *)error {
  [self dismissViewControllerAnimated:YES completion:nil];
  // TODO: handle the error.
  NSLog(@"Error: %@", [error description]);
}

// User canceled the operation.
- (void)wasCancelled:(GMSAutocompleteViewController *)viewController {
  [self dismissViewControllerAnimated:YES completion:nil];
}

// Turn the network activity indicator on and off again.
- (void)didRequestAutocompletePredictions:(GMSAutocompleteViewController *)viewController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)didUpdateAutocompletePredictions:(GMSAutocompleteViewController *)viewController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

@end

Ajouter un contrôleur de résultats

Utilisez un contrôleur de résultats pour mieux maîtriser l'interface utilisateur de saisie de texte. Le contrôleur de résultats bascule dynamiquement la visibilité de la liste des résultats en fonction de la cible de l'UI de saisie.

Pour ajouter un contrôleur de résultats à votre application :

  1. Créez un GMSAutocompleteResultsViewController.
  2. Implémentez le protocole GMSAutocompleteResultsViewControllerDelegate dans le contrôleur d'affichage parent et affectez ce dernier en tant que propriété déléguée.
  3. Créez un objet UISearchController, en indiquant le GMSAutocompleteResultsViewController comme argument du contrôleur de résultats.
  4. Définissez le GMSAutocompleteResultsViewController en tant que propriété searchResultsUpdater du UISearchController.
  5. Ajoutez le paramètre searchBar du UISearchController à l'interface utilisateur de votre application.
  6. Gérez la sélection de l'utilisateur dans la méthode déléguée didAutocompleteWithPlace.

Pour placer la barre de recherche d'un UISearchController dans l'interface utilisateur de votre application, vous pouvez :

Ajouter une barre de recherche à la barre de navigation

L'exemple de code suivant montre comment ajouter un contrôleur de résultats, comment ajouter la searchBar à la barre de navigation et comment gérer la sélection de l'utilisateur :

Swift

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

    // Put the search bar in the navigation bar.
    searchController?.searchBar.sizeToFit()
    navigationItem.titleView = searchController?.searchBar

    // When UISearchController presents the results view, present it in
    // this view controller, not one further up the chain.
    definesPresentationContext = true

    // Prevent the navigation bar from being hidden when searching.
    searchController?.hidesNavigationBarDuringPresentation = false
  }
}

// Handle the user's selection.
extension ViewController: GMSAutocompleteResultsViewControllerDelegate {
  func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                         didAutocompleteWith place: GMSPlace) {
    searchController?.isActive = false
    // Do something with the selected place.
    print("Place name: \(place.name)")
    print("Place address: \(place.formattedAddress)")
    print("Place attributions: \(place.attributions)")
  }

  func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                         didFailAutocompleteWithError error: Error){
    // TODO: handle the error.
    print("Error: ", error.localizedDescription)
  }

  // Turn the network activity indicator on and off again.
  func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = true
  }

  func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
  }
}

Objective-C

- (void)viewDidLoad {
  _resultsViewController = [[GMSAutocompleteResultsViewController alloc] init];
  _resultsViewController.delegate = self;

  _searchController = [[UISearchController alloc]
                       initWithSearchResultsController:_resultsViewController];
  _searchController.searchResultsUpdater = _resultsViewController;

  // Put the search bar in the navigation bar.
  [_searchController.searchBar sizeToFit];
  self.navigationItem.titleView = _searchController.searchBar;

  // When UISearchController presents the results view, present it in
  // this view controller, not one further up the chain.
  self.definesPresentationContext = YES;

  // Prevent the navigation bar from being hidden when searching.
  _searchController.hidesNavigationBarDuringPresentation = NO;
}

// Handle the user's selection.
- (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController
  didAutocompleteWithPlace:(GMSPlace *)place {
    _searchController.active = NO;
    // Do something with the selected place.
    NSLog(@"Place name %@", place.name);
    NSLog(@"Place address %@", place.formattedAddress);
    NSLog(@"Place attributions %@", place.attributions.string);
}

- (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController
didFailAutocompleteWithError:(NSError *)error {
  [self dismissViewControllerAnimated:YES completion:nil];
  // TODO: handle the error.
  NSLog(@"Error: %@", [error description]);
}

// Turn the network activity indicator on and off again.
- (void)didRequestAutocompletePredictionsForResultsController:
    (GMSAutocompleteResultsViewController *)resultsController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)didUpdateAutocompletePredictionsForResultsController:
    (GMSAutocompleteResultsViewController *)resultsController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

Remarque : Pour que la barre de recherche s'affiche correctement, le contrôleur d'affichage de votre application doit être intégré dans un objet UINavigationController.

Ajouter une barre de recherche en haut d'une vue

L'exemple de code suivant montre comment ajouter la searchBar en haut d'une vue.

Swift

import UIKit
import GooglePlaces

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: CGRect(x: 0, y: 65.0, width: 350.0, height: 45.0))

    subView.addSubview((searchController?.searchBar)!)
    view.addSubview(subView)
    searchController?.searchBar.sizeToFit()
    searchController?.hidesNavigationBarDuringPresentation = false

    // When UISearchController presents the results view, present it in
    // this view controller, not one further up the chain.
    definesPresentationContext = true
  }
}

// Handle the user's selection.
extension ViewController: GMSAutocompleteResultsViewControllerDelegate {
  func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                         didAutocompleteWith place: GMSPlace) {
    searchController?.isActive = false
    // Do something with the selected place.
    print("Place name: \(place.name)")
    print("Place address: \(place.formattedAddress)")
    print("Place attributions: \(place.attributions)")
  }

  func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                         didFailAutocompleteWithError error: Error){
    // TODO: handle the error.
    print("Error: ", error.localizedDescription)
  }

  // Turn the network activity indicator on and off again.
  func didRequestAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = true
  }

  func didUpdateAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
  }
}

Objective-C

- (void)viewDidLoad {
    [super viewDidLoad];

    _resultsViewController = [[GMSAutocompleteResultsViewController alloc] init];
    _resultsViewController.delegate = self;

    _searchController = [[UISearchController alloc]
                             initWithSearchResultsController:_resultsViewController];
    _searchController.searchResultsUpdater = _resultsViewController;

    UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 65.0, 250, 50)];

    [subView addSubview:_searchController.searchBar];
    [_searchController.searchBar sizeToFit];
    [self.view addSubview:subView];

    // When UISearchController presents the results view, present it in
    // this view controller, not one further up the chain.
    self.definesPresentationContext = YES;
}

// Handle the user's selection.
- (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController
didAutocompleteWithPlace:(GMSPlace *)place {
  [self dismissViewControllerAnimated:YES completion:nil];
  // Do something with the selected place.
  NSLog(@"Place name %@", place.name);
  NSLog(@"Place address %@", place.formattedAddress);
  NSLog(@"Place attributions %@", place.attributions.string);
}

- (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController
didFailAutocompleteWithError:(NSError *)error {
  [self dismissViewControllerAnimated:YES completion:nil];
  // TODO: handle the error.
  NSLog(@"Error: %@", [error description]);
}

// Turn the network activity indicator on and off again.
- (void)didRequestAutocompletePredictionsForResultsController:
    (GMSAutocompleteResultsViewController *)resultsController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)didUpdateAutocompletePredictionsForResultsController:
    (GMSAutocompleteResultsViewController *)resultsController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

Par défaut, UISearchController masque la barre de navigation lors de la présentation (peut être désactivé). Lorsque la barre de navigation est visible et opaque, cela signifie que le contrôleur UISearchController ne définit pas correctement l'emplacement. Utilisez le code suivant pour contourner le problème :

Swift

navigationController?.navigationBar.translucent = false
searchController?.hidesNavigationBarDuringPresentation = false

// This makes the view area include the nav bar even though it is opaque.
// Adjust the view placement down.
self.extendedLayoutIncludesOpaqueBars = true
self.edgesForExtendedLayout = .top

Objective-C

self.navigationController.navigationBar.translucent = NO;
_searchController.hidesNavigationBarDuringPresentation = NO;

// This makes the view area include the nav bar even though it is opaque.
// Adjust the view placement down.
self.extendedLayoutIncludesOpaqueBars = YES;
self.edgesForExtendedLayout = UIRectEdgeTop;

Ajouter une barre de recherche en utilisant les résultats de la vue contextuelle

L'exemple de code suivant montre comment placer une barre de recherche sur le côté droit de la barre de navigation, et afficher les résultats dans une vue contextuelle.

Swift

import UIKit
import GooglePlaces

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

    // Add the search bar to the right of the nav bar,
    // use a popover to display the results.
    // Set an explicit size as we don't want to use the entire nav bar.
    searchController?.searchBar.frame = (CGRect(x: 0, y: 0, width: 250.0, height: 44.0))
    navigationItem.rightBarButtonItem = UIBarButtonItem(customView: (searchController?.searchBar)!)

    // When UISearchController presents the results view, present it in
    // this view controller, not one further up the chain.
    definesPresentationContext = true

    // Keep the navigation bar visible.
    searchController?.hidesNavigationBarDuringPresentation = false
    searchController?.modalPresentationStyle = .popover
  }
}
// Handle the user's selection.
extension ViewController: GMSAutocompleteResultsViewControllerDelegate {
  func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                         didAutocompleteWith place: GMSPlace) {
    searchController?.isActive = false
    // Do something with the selected place.
    print("Place name: \(place.name)")
    print("Place address: \(place.formattedAddress)")
    print("Place attributions: \(place.attributions)")
  }

  func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                         didFailAutocompleteWithError error: Error){
    // TODO: handle the error.
    print("Error: ", error.localizedDescription)
  }

  // Turn the network activity indicator on and off again.
  func didRequestAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = true
  }

  func didUpdateAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
  }
}

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];

  _resultsViewController = [[GMSAutocompleteResultsViewController alloc] init];
  _resultsViewController.delegate = self;

  _searchController = [[UISearchController alloc]
                           initWithSearchResultsController:_resultsViewController];
  _searchController.searchResultsUpdater = _resultsViewController;

  // Add the search bar to the right of the nav bar,
  // use a popover to display the results.
  // Set an explicit size as we don't want to use the entire nav bar.
  _searchController.searchBar.frame = CGRectMake(0, 0, 250.0f, 44.0f);
  self.navigationItem.rightBarButtonItem =
  [[UIBarButtonItem alloc] initWithCustomView:_searchController.searchBar];

  // When UISearchController presents the results view, present it in
  // this view controller, not one further up the chain.
  self.definesPresentationContext = YES;

  // Keep the navigation bar visible.
  _searchController.hidesNavigationBarDuringPresentation = NO;

  _searchController.modalPresentationStyle = UIModalPresentationPopover;
}

// Handle the user's selection.
- (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController
didAutocompleteWithPlace:(GMSPlace *)place {
  [self dismissViewControllerAnimated:YES completion:nil];
  NSLog(@"Place name %@", place.name);
  NSLog(@"Place address %@", place.formattedAddress);
  NSLog(@"Place attributions %@", place.attributions.string);
}

- (void)resultsController:(GMSAutocompleteResultsViewController *)resultsController
didFailAutocompleteWithError:(NSError *)error {
  [self dismissViewControllerAnimated:YES completion:nil];
  // TODO: handle the error.
  NSLog(@"Error: %@", [error description]);
}

// Turn the network activity indicator on and off again.
- (void)didRequestAutocompletePredictionsForResultsController:
    (GMSAutocompleteResultsViewController *)resultsController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)didUpdateAutocompletePredictionsForResultsController:
    (GMSAutocompleteResultsViewController *)resultsController {
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

Remarque : Pour que la barre de recherche s'affiche correctement, le contrôleur d'affichage de votre application doit être intégré dans un objet UINavigationController.

Utiliser une source de données de table

Si votre application doit prendre en charge iOS 7, vous pouvez utiliser la classe GMSAutocompleteTableDataSource pour déclencher la vue de table d'un UISearchDisplayController.

Pour utiliser GMSAutocompleteTableDataSource pour afficher un contrôleur de recherche :

  1. Implémentez les protocoles GMSAutocompleteTableDataSourceDelegate et UISearchDisplayDelegate dans le contrôleur d'affichage parent.
  2. Créez une instance GMSAutocompleteTableDataSource et affectez le contrôleur d'affichage parent en tant que propriété déléguée.
  3. Créez une instance de UISearchDisplayController.
  4. Ajoutez la searchBar du UISearchController à l'interface utilisateur de votre application.
  5. Gérez la sélection de l'utilisateur dans la méthode déléguée didAutocompleteWithPlace.
  6. Annulez le contrôleur dans les méthodes déléguées didAutocompleteWithPlace, didFailAutocompleteWithError et wasCancelled.

L'exemple de code suivant montre comment utiliser la classe GMSAutocompleteTableDataSource pour afficher la vue de table d'un UISearchDisplayController.

Swift

import UIKit
import GooglePlaces

class ViewController: UIViewController, UISearchDisplayDelegate {

  var searchBar: UISearchBar?
  var tableDataSource: GMSAutocompleteTableDataSource?
  var searchDisplayController: UISearchDisplayController?

  override func viewDidLoad() {
    super.viewDidLoad()

    searchBar = UISearchBar(CGRect(x: 0, y: 0, width: 250.0, height: 44.0))

    tableDataSource = GMSAutocompleteTableDataSource()
    tableDataSource?.delegate = self

    searchDisplayController = UISearchDisplayController(searchBar: searchBar!, contentsController: self)
    searchDisplayController?.searchResultsDataSource = tableDataSource
    searchDisplayController?.searchResultsDelegate = tableDataSource
    searchDisplayController?.delegate = self

    view.addSubview(searchBar!)
  }

  func didUpdateAutocompletePredictionsForTableDataSource(tableDataSource: GMSAutocompleteTableDataSource) {
    // Turn the network activity indicator off.
    UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    // Reload table data.
    searchDisplayController?.searchResultsTableView.reloadData()
  }

  func didRequestAutocompletePredictionsForTableDataSource(tableDataSource: GMSAutocompleteTableDataSource) {
    // Turn the network activity indicator on.
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    // Reload table data.
    searchDisplayController?.searchResultsTableView.reloadData()
  }

}

extension ViewController: GMSAutocompleteTableDataSourceDelegate {
  func tableDataSource(tableDataSource: GMSAutocompleteTableDataSource, didAutocompleteWithPlace place: GMSPlace) {
    searchDisplayController?.active = false
    // Do something with the selected place.
    print("Place name: \(place.name)")
    print("Place address: \(place.formattedAddress)")
    print("Place attributions: \(place.attributions)")
  }

  func searchDisplayController(controller: UISearchDisplayController, shouldReloadTableForSearchString searchString: String?) -> Bool {
    tableDataSource?.sourceTextHasChanged(searchString)
    return false
  }

  func tableDataSource(tableDataSource: GMSAutocompleteTableDataSource, didFailAutocompleteWithError error: NSError) {
    // TODO: Handle the error.
    print("Error: \(error.description)")
  }

  func tableDataSource(tableDataSource: GMSAutocompleteTableDataSource, didSelectPrediction prediction: GMSAutocompletePrediction) -> Bool {
    return true
  }
}

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.

  _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 20, 250.0f, 44.0f)];

  _tableDataSource = [[GMSAutocompleteTableDataSource alloc] init];
  _tableDataSource.delegate = self;

  _searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar
                                                               contentsController:self];
  _searchDisplayController.searchResultsDataSource = _tableDataSource;
  _searchDisplayController.searchResultsDelegate = _tableDataSource;
  _searchDisplayController.delegate = self;

  [self.view addSubview:_searchBar];
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString
{
  [_tableDataSource sourceTextHasChanged:searchString];
  return NO;
}

// Handle the user's selection.
- (void)tableDataSource:(GMSAutocompleteTableDataSource *)tableDataSource
  didAutocompleteWithPlace:(GMSPlace *)place {
  [_searchDisplayController setActive:NO animated:YES];
  // Do something with the selected place.
  NSLog(@"Place name %@", place.name);
  NSLog(@"Place address %@", place.formattedAddress);
  NSLog(@"Place attributions %@", place.attributions.string);
}

- (void)tableDataSource:(GMSAutocompleteTableDataSource *)tableDataSource
  didFailAutocompleteWithError:(NSError *)error {
  [_searchDisplayController setActive:NO animated:YES];
  // TODO: handle the error.
  NSLog(@"Error: %@", [error description]);
}

- (void)didUpdateAutocompletePredictionsForTableDataSource:
  (GMSAutocompleteTableDataSource *)tableDataSource {
  // Turn the network activity indicator off.
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  // Reload table data.
  [_searchDisplayController.searchResultsTableView reloadData];
}

- (void)didRequestAutocompletePredictionsForTableDataSource:
  (GMSAutocompleteTableDataSource *)tableDataSource {
  // Turn the network activity indicator on.
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  // Reload table data.
  [_searchDisplayController.searchResultsTableView reloadData];
}

Remarque : L'API UISearchDisplayController ne prend pas en charge le concept de mises à jour de données asynchrones, il est donc nécessaire de forcer les mises à jour des tables en rechargeant les données de la table dans les méthodes didUpdateAutocompletePredictions et didRequestAutocompletePredictions du protocole GMSAutoCompleteResultsDelegate.

Personnaliser les couleurs du texte et de l'arrière-plan

Vous pouvez définir les couleurs de tous les textes et arrière-plans de la commande d'interface utilisateur Autocomplete afin que l'apparence de votre widget se rapproche de celle de votre application. Pour définir les couleurs de la commande d'interface utilisateur, vous pouvez procéder de deux façons :

  • En utilisant le protocole UIAppearancel iOS natif pour définir le style global des commandes d'interface utilisateur là où il est possible de le faire. Ces paramètres s'appliquent à de nombreux éléments de commande de l'interface utilisateur, mais pas à tous.
  • En utilisant les méthodes du SDK sur les classes de widget afin de définir les propriétés qui ne sont pas prises en charge par le protocole UIAppearance.

En principe, votre application utilisera une combinaison du protocole UIAppearance et des méthodes du SDK. Le diagramme suivant présente les éléments qui peuvent être stylisés :

Couleurs des commandes IU Autocomplete

Le tableau suivant répertorie tous les éléments d'interface utilisateur, et indique comment chacun d'eux doit être stylisé (protocole UIAppearance ou méthode du SDK).

Élément d'interface Méthode Comment le styliser
Couleur de la barre de navigation (arrière-plan) Protocole UIAppearance Appelez setBarTintColor sur le proxy UINavigationBar.
Couleur de la barre de navigation (texte de la barre de recherche et bouton Annuler) Protocole UIAppearance Appelez setTintColor sur le proxy UINavigationBar.
Couleur du texte de la barre de recherche Protocole UIAppearance Définissez NSForegroundColorAttributeName dans searchBarTextAttributes.
Couleur de la barre de recherche S/O La barre de recherche est translucide et s'affichera en tant que version ombrée de la barre de navigation.
Couleur du texte fictif de la barre de recherche (texte de recherche par défaut) Protocole UIAppearance Définissez NSForegroundColorAttributeName dans placeholderAttributes.
Texte principal (également appliqué au texte d'erreur ou de message) Méthode SDK Appelez primaryTextColor.
Surbrillance du texte principal Méthode SDK Appelez primaryTextHighlightColor.
Texte secondaire Méthode SDK Appelez secondaryTextColor.
Texte d'erreur et de message Méthode SDK Appelez primaryTextColor.
Arrière-plan des cellules de tableau Méthode SDK Appelez tableCellBackgroundColor.
Couleur des séparateurs de cellules de tableau Méthode SDK Appelez tableCellSeparatorColor.
Bouton « Try Again » Méthode SDK Appelez tintColor.
Indicateur d'activité (roue de progression) Protocole UIAppearance Appelez setColor sur le proxy UIActivityIndicatorView.
Logo « Powered by Google », image de nuage triste S/O La version blanche ou grise est automatiquement sélectionnée en fonction du contraste de l'arrière-plan.
Icônes de loupe et de texte clair dans le champ de texte de la barre de recherche S/O Pour les styliser, remplacez les images par défaut par des images de la couleur voulue.

Remarque : Ces propriétés n'influent que sur les paramètres de couleur des éléments de l'interface utilisateur. Le changement de la taille des éléments d'interface ou de la police utilisée dans les cellules de tableau n'est pas pris en charge.

Utiliser le protocole UIAppearance

Vous pouvez utiliser le protocole UIAppearance pour obtenir le proxy d'apparence pour un élément d'UI donné, que vous pouvez ensuite utiliser pour définir la couleur de l'élément d'UI. Dès qu'une modification est effectuée, toutes les instances d'un élément d'UI donné sont affectées. Ainsi, l'exemple suivant modifie de manière globale la couleur du texte des classes UITextField en vert lorsqu'elles sont contenues dans une UISearchBar :

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil]
    setDefaultTextAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor]}];

Pour plus d'informations sur la définition des valeurs de couleur, voir Référence sur la classe UIColor.

Les extraits de code suivants montrent toutes les commandes proxy que vous devez utiliser pour styliser tous les éléments de la commande d'interface utilisateur Autocomplete en plein écran. Ajoutez ce code à la méthode didFinishLaunchingWithOptions dans Appdelegate.m :

// Define some colors.
UIColor *darkGray = [UIColor darkGrayColor];
UIColor *lightGray = [UIColor lightGrayColor];

// Navigation bar background.
[[UINavigationBar appearance] setBarTintColor:darkGray];
[[UINavigationBar appearance] setTintColor:lightGray];

// Color of typed text in the search bar.
NSDictionary *searchBarTextAttributes = @{
                                          NSForegroundColorAttributeName: lightGray,
                                          NSFontAttributeName : [UIFont systemFontOfSize:[UIFont systemFontSize]]
                                          };
[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
    .defaultTextAttributes = searchBarTextAttributes;

// Color of the placeholder text in the search bar prior to text entry.
NSDictionary *placeholderAttributes = @{
                                        NSForegroundColorAttributeName: lightGray,
                                        NSFontAttributeName : [UIFont systemFontOfSize:[UIFont systemFontSize]]
                                        };

// Color of the default search text.
// NOTE: In a production scenario, "Search" would be a localized string.
NSAttributedString *attributedPlaceholder =
[[NSAttributedString alloc] initWithString:@"Search"
                                attributes:placeholderAttributes];
[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
    .attributedPlaceholder = attributedPlaceholder;

// Color of the in-progress spinner.
[[UIActivityIndicatorView appearance] setColor:lightGray];

// To style the two image icons in the search bar (the magnifying glass
// icon and the 'clear text' icon), replace them with different images.
[[UISearchBar appearance] setImage:[UIImage imageNamed:@"custom_clear_x_high"]
                  forSearchBarIcon:UISearchBarIconClear
                            state:UIControlStateHighlighted];
[[UISearchBar appearance] setImage:[UIImage imageNamed:@"custom_clear_x"]
                  forSearchBarIcon:UISearchBarIconClear
                            state:UIControlStateNormal];
[[UISearchBar appearance] setImage:[UIImage imageNamed:@"custom_search"]
                    forSearchBarIcon:UISearchBarIconSearch
                            state:UIControlStateNormal];

// Color of selected table cells.
UIView *selectedBackgroundView = [[UIView alloc] init];
selectedBackgroundView.backgroundColor = [UIColor lightGrayColor];
[UITableViewCell appearanceWhenContainedIn:[GMSAutocompleteViewController class], nil]
    .selectedBackgroundView = selectedBackgroundView;

Définir les propriétés de style des commandes de l'interface utilisateur

Un sous-ensemble des éléments de commande d'UI possède des propriétés qui ne sont pas affectées par le protocole UIAppearance et qui doivent donc être définies directement. L'exemple de code suivant montre comment définir les couleurs de premier plan et d'arrière-plan, et comment les appliquer à une instance de commande d'UI intitulée acController. Ajoutez ce code à la méthode onLaunchClicked dans ViewController.m :

UIColor <em>darkGray = [UIColor darkGrayColor];
UIColor </em>lightGray = [UIColor lightGrayColor];</p>
<p>acController.secondaryTextColor = [UIColor colorWithWhite:1.0f alpha:0.5f];
acController.primaryTextColor = lightGray;
acController.primaryTextHighlightColor = [UIColor grayColor];
acController.tableCellBackgroundColor = darkGray;
acController.tableCellSeparatorColor = lightGray;
acController.tintColor = lightGray;

Remarque : Pour GMSAutocompleteViewController et GMSAutocompleteResultsViewController, vous pouvez utiliser Interface Builder pour définir ces valeurs.

Obtenir des prédictions de lieu par programmation

Vous pouvez créer une UI de recherche personnalisée pour remplacer celle fournie par le widget de saisie semi-automatique. Pour ce faire, votre application doit recevoir des prédictions de lieu par programmation. Pour obtenir une liste des noms et/ou adresses des lieux suggérés, votre application peut procéder de l'une des façons suivantes :

Appeler GMSPlacesClient

Pour obtenir la liste des noms de lieu et/ou adresses suggérés, appelez la méthode GMSPlacesClient autocompleteQuery:bounds:filter:callback: en indiquant les paramètres suivants :

  • Une chaîne autocompleteQuery contenant le texte saisi par l'utilisateur.
  • Un objet GMSCoordinateBounds qui affine les résultats à une zone spécifique représentée par des valeurs de latitude et longitude.
  • Un paramètre GMSAutocompleteFilter qui limite les résultats à un type de lieu spécifique. Pour extraire tous les types, n'indiquez aucune valeur. Les types de lieu suivants sont pris en charge dans les filtres :

    • kGMSPlacesAutocompleteTypeFilterNoFilter – Filtre vide ; tous les résultats sont renvoyés.
    • kGMSPlacesAutocompleteTypeFilterGeocode – Renvoie uniquement des résultats de géocodage plutôt que des professionnels. Utilisez cette requête pour affiner les résultats lorsque le point géographique spécifié est indéterminé.
    • kGMSPlacesAutocompleteTypeFilterAddress – Renvoie uniquement les résultats de la saisie semi-automatique avec une adresse précise. Utilisez ce type de requête lorsque vous savez que l'utilisateur recherche une adresse spécifiée complète.
    • kGMSPlacesAutocompleteTypeFilterEstablishment – Renvoie uniquement les lieux représentant des professionnels.
    • kGMSPlacesAutocompleteTypeFilterRegion – Renvoie uniquement des lieux qui correspondent à l'un des types suivants :

      • locality
      • sublocality
      • postal_code
      • country
      • administrative_area_level_1
      • administrative_area_level_2
    • kGMSPlacesAutocompleteTypeFilterCity – Renvoie uniquement les résultats correspondant à locality ou administrative_area_level_3.

Pour plus d'informations, voir types de lieu.

  • Une méthode de rappel pour gérer les prédictions renvoyées.

Les exemples de code ci-dessous représentent un appel simplifié vers autocompleteQuery:bounds:filter:callback:.

Swift

func placeAutocomplete() {
  let filter = GMSAutocompleteFilter()
  filter.type = .establishment
  placesClient.autocompleteQuery("Sydney Oper", bounds: nil, filter: filter, callback: {(results, error) -> Void in
    if let error = error {
      print("Autocomplete error \(error)")
      return
    }
    if let results = results {
      for result in results {
        print("Result \(result.attributedFullText) with placeID \(result.placeID)")
      }
    }
  })
}

Objective-C

- (void)placeAutocomplete {

GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.type = kGMSPlacesAutocompleteTypeFilterEstablishment;

[_placesClient autocompleteQuery:@"Sydney Oper"
                          bounds:nil
                          filter:filter
                        callback:^(NSArray *results, NSError *error) {
                          if (error != nil) {
                            NSLog(@"Autocomplete error %@", [error localizedDescription]);
                            return;
                          }

                          for (GMSAutocompletePrediction* result in results) {
                            NSLog(@"Result '%@' with placeID %@", result.attributedFullText.string, result.placeID);
                          }
                        }];
}

L'API appelle la méthode de rappel spécifiée en indiquant un ensemble d'objets GMSAutocompletePrediction .

Chaque objet GMSAutocompletePrediction contient les informations suivantes :

  • attributedFullText – Texte complet de la prédiction, sous la forme d'une chaîne NSAttributedString. Par exemple, « Sydney Opera House, Sydney, New South Wales, Australia ». Chaque élément de texte correspondant à la saisie de l'utilisateur est associé à un attribut kGMSAutocompleteMatchAttribute. Vous pouvez utiliser cet attribut pour mettre en évidence le texte correspondant dans la requête de l'utilisateur, comme illustré ci-dessous.
  • placeID – L'identifiant du lieu proposé. Un identifiant de lieu est un identifiant texte qui identifie un lieu de façon unique. Pour plus d'informations sur les identifiants de lieu, voir la présentation des identifiants de lieu.

L'exemple de code suivant décrit comment mettre en gras les sections du résultat correspondant au texte de la requête de l'utilisateur à l'aide du paramètre enumerateAttribute :

Swift

let regularFont = UIFont.systemFont(ofSize: UIFont.labelFontSize)
let boldFont = UIFont.boldSystemFont(ofSize: UIFont.labelFontSize)

let bolded = prediction.attributedFullText.mutableCopy() as! NSMutableAttributedString
bolded.enumerateAttribute(kGMSAutocompleteMatchAttribute, in: NSMakeRange(0, bolded.length), options: []) {
  (value, range: NSRange, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
    let font = (value == nil) ? regularFont : boldFont
    bolded.addAttribute(NSFontAttributeName, value: font, range: range)
}

label.attributedText = bolded
    

Objective-C

UIFont *regularFont = [UIFont systemFontOfSize:[UIFont labelFontSize]];
UIFont *boldFont = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];

NSMutableAttributedString *bolded = [prediction.attributedFullText mutableCopy];
[bolded enumerateAttribute:kGMSAutocompleteMatchAttribute
                   inRange:NSMakeRange(0, bolded.length)
                   options:0
                usingBlock:^(id value, NSRange range, BOOL *stop) {
                  UIFont *font = (value == nil) ? regularFont : boldFont;
                  [bolded addAttribute:NSFontAttributeName value:font range:range];
                }];

label.attributedText = bolded;
    

Utiliser l'extracteur

Pour créer entièrement votre propre commande de saisie semi-automatique, vous pouvez utiliser GMSAutocompleteFetcher, qui incorpore la méthode autocompleteQuery sur GMSPlacesClient. L'extracteur permet de réguler les requêtes, en renvoyant uniquement les résultats correspondant à la saisie de texte de recherche la plus récente. Il ne fournit aucun élément d'UI.

Pour implémenter GMSAutocompleteFetcher, procédez comme suit :

  1. Implémentez le protocole GMSAutocompleteFetcherDelegate .
  2. Créez un objet GMSAutocompleteFetcher.
  3. Appelez sourceTextHasChanged sur l'extracteur lors de la frappe.
  4. Traitez les prédictions et les erreurs en utilisant les méthodes de protocole didAutcompleteWithPredictions et didFailAutocompleteWithError .

L'exemple de code suivant montre comment utiliser l'extracteur pour prendre la saisie de l'utilisateur et afficher les résultats de lieux correspondants dans une vue de texte. La fonctionnalité de sélection de lieu a été omise. FetcherSampleViewController définit à partir de UIViewController dans FetcherSampleViewController.h.

Swift

import UIKit
import GooglePlaces

class ViewController: UIViewController {

  var textField: UITextField?
  var resultText: UITextView?
  var fetcher: GMSAutocompleteFetcher?

  override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = .white
    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

    textField = UITextField(frame: CGRect(x: 5.0, y: 10.0,
                                          width: view.bounds.size.width - 5.0,
                                          height: 44.0))
    textField?.autoresizingMask = .flexibleWidth
    textField?.addTarget(self, action: #selector(textFieldDidChange(textField:)),
                         for: .editingChanged)

    resultText = UITextView(frame: CGRect(x: 0, y: 45.0,
                                          width: view.bounds.size.width,
                                          height: view.bounds.size.height - 45.0))
    resultText?.backgroundColor = UIColor(white: 0.95, alpha: 1.0)
    resultText?.text = "No Results"
    resultText?.isEditable = false

    view.addSubview(textField!)
    view.addSubview(resultText!)
  }

  func textFieldDidChange(textField: UITextField) {
    fetcher?.sourceTextHasChanged(textField.text!)
  }

}

extension ViewController: GMSAutocompleteFetcherDelegate {
  func didAutocomplete(with predictions: [GMSAutocompletePrediction]) {
    let resultsStr = NSMutableString()
    for prediction in predictions {
      resultsStr.appendFormat("%@\n", prediction.attributedPrimaryText)
    }

    resultText?.text = resultsStr as String
  }

  func didFailAutocompleteWithError(_ error: Error) {
    resultText?.text = error.localizedDescription
  }

}

Objective-C

#import "FetcherSampleViewController.h"
#import <GooglePlaces/GooglePlaces.h>

@interface FetcherSampleViewController () <GMSAutocompleteFetcherDelegate>

@end

@implementation FetcherSampleViewController {
  UITextField *_textField;
  UITextView *_resultText;
  GMSAutocompleteFetcher* _fetcher;
}

- (void)viewDidLoad {
  [super viewDidLoad];

  self.view.backgroundColor = [UIColor whiteColor];
  self.edgesForExtendedLayout = UIRectEdgeNone;

  // Set bounds to inner-west Sydney Australia.
  CLLocationCoordinate2D neBoundsCorner = CLLocationCoordinate2DMake(-33.843366, 151.134002);
  CLLocationCoordinate2D swBoundsCorner = CLLocationCoordinate2DMake(-33.875725, 151.200349);
  GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithCoordinate:neBoundsCorner
                                                                     coordinate:swBoundsCorner];

  // Set up the autocomplete filter.
  GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
  filter.type = kGMSPlacesAutocompleteTypeFilterEstablishment;

  // Create the fetcher.
  _fetcher = [[GMSAutocompleteFetcher alloc] initWithBounds:bounds
                                                     filter:filter];
  _fetcher.delegate = self;

  // Set up the UITextField and UITextView.
  _textField = [[UITextField alloc] initWithFrame:CGRectMake(5.0f,
                                                             0,
                                                             self.view.bounds.size.width - 5.0f,
                                                             44.0f)];
  _textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  [_textField addTarget:self
                 action:@selector(textFieldDidChange:)
       forControlEvents:UIControlEventEditingChanged];
  _resultText =[[UITextView alloc] initWithFrame:CGRectMake(0,
                                                            45.0f,
                                                            self.view.bounds.size.width,
                                                            self.view.bounds.size.height - 45.0f)];
  _resultText.backgroundColor = [UIColor colorWithWhite:0.95f alpha:1.0f];
  _resultText.text = @"No Results";
  _resultText.editable = NO;
  [self.view addSubview:_textField];
  [self.view addSubview:_resultText];
}

- (void)textFieldDidChange:(UITextField *)textField {
  NSLog(@"%@", textField.text);
  [_fetcher sourceTextHasChanged:textField.text];
}

#pragma mark - GMSAutocompleteFetcherDelegate
- (void)didAutocompleteWithPredictions:(NSArray *)predictions {
  NSMutableString *resultsStr = [NSMutableString string];
  for (GMSAutocompletePrediction *prediction in predictions) {
      [resultsStr appendFormat:@"%@\n", [prediction.attributedPrimaryText string]];
  }
  _resultText.text = resultsStr;
}

- (void)didFailAutocompleteWithError:(NSError *)error {
  _resultText.text = [NSString stringWithFormat:@"%@", error.localizedDescription];
}

@end

Définir le paramètre GMSCoordinateBounds de saisie semi-automatique

Vous pouvez indiquer un paramètre GMSCoordinateBounds à Autocomplete pour aider à la saisie semi-automatique. Par exemple, si vous avez déjà une carte Google dans votre contrôleur d'affichage, vous pouvez utiliser les limites de la fenêtre d'affichage actuelle pour affiner la saisie semi-automatique des résultats.

Swift

func placeAutocomplete() {
  let visibleRegion = mapView.projection.visibleRegion()
  let bounds = GMSCoordinateBounds(coordinate: visibleRegion.farLeft, coordinate: visibleRegion.nearRight)

  let filter = GMSAutocompleteFilter()
  filter.type = .establishment
  placesClient.autocompleteQuery("Sydney Oper", bounds: bounds, filter: filter, callback: {
    (results, error) -> Void in
    guard error == nil else {
      print("Autocomplete error \(error)")
      return
    }
    if let results = results {
      for result in results {
        print("Result \(result.attributedFullText) with placeID \(result.placeID)")
      }
    }
  })
}

Objective-C

- (void)placeAutocomplete {

GMSVisibleRegion visibleRegion = self.mapView.projection.visibleRegion;
GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithCoordinate:visibleRegion.farLeft
                                                                   coordinate:visibleRegion.nearRight];
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init];
filter.type = kGMSPlacesAutocompleteTypeFilterEstablishment;

[_placesClient autocompleteQuery:@"Sydney Oper"
                          bounds:bounds
                          filter:filter
                        callback:^(NSArray *results, NSError *error) {
                          if (error != nil) {
                            NSLog(@"Autocomplete error %@", [error localizedDescription]);
                            return;
                          }

                          for (GMSAutocompletePrediction* result in results) {
                            NSLog(@"Result '%@' with placeID %@", result.attributedFullText.string, result.placeID);
                          }
                        }];
}

Limites d'utilisation

Afficher les mentions dans votre application

  • Si votre application utilise le service de saisie semi-automatique par programmation, vous devez afficher une mention « Powered by Google » ou la faire apparaître sur une carte Google.
  • Si votre application utilise la commande d'interface utilisateur Autocomplete, aucune action supplémentaire n'est requise (la mention obligatoire s'affiche par défaut).
  • Si vous extrayez et affichez des informations de lieu supplémentaires après avoir obtenu un lieu par identifiant, vous devez afficher les mentions tierces également.

Pour en savoir plus, voir la documentation sur les mentions.

Contrôler l'indicateur d'activité réseau

Pour contrôler l'indicateur d'activité réseau dans la barre d'état des applications, vous devez implémenter les méthodes déléguées facultatives adéquates pour la classe Autocomplete que vous utilisez et activer/désactiver vous-même l'indicateur réseau.

  • Pour GMSAutocompleteViewController, vous devez implémenter les méthodes déléguées didRequestAutocompletePredictions: et didUpdateAutocompletePredictions:.
  • Pour GMSAutocompleteResultsViewController, vous devez implémenter les méthodes déléguées didRequestAutocompletePredictionsForResultsController: et didUpdateAutocompletePredictionsForResultsController:.
  • Pour GMSAutocompleteTableDataSource, vous devez implémenter les méthodes déléguées didRequestAutocompletePredictionsForTableDataSource: et didUpdateAutocompletePredictionsForTableDataSource:.

En implémentant ces méthodes et en définissant [UIApplication sharedApplication].networkActivityIndicatorVisible sur YES et NO respectivement, la barre d'état reflète correctement l'interface utilisateur Autocomplete.

Résolution des erreurs

Même si tout type d'erreur peut se produire, la majorité des erreurs que votre application peut rencontrer sont dues à des erreurs de configuration (par exemple, utilisation d'une clé d'API incorrecte, ou clé d'API mal configurée), ou à des erreurs de quota (votre application a dépassé son quota). Pour plus d'informations sur les quotas, voir les limites d'utilisation.

Les erreurs qui se produisent au cours de l'utilisation des commandes de saisie semi-automatique sont renvoyées dans la méthode didFailAutocompleteWithError() des divers protocoles délégués. La propriété code de l'objet NSError fourni est définie sur l'une des valeurs de l'énumération GMSPlacesErrorCode.

Envoyer des commentaires concernant…