Anda sudah siap!

Untuk mulai mengembangkan, masuklah ke dokumentasi developer kami.

Aktifkan Google Places API for iOS

Untuk membantu Anda memulai, kami akan memandu Anda melalui Google Developers Console untuk melakukan beberapa hal terlebih dahulu:

  1. Buat atau pilih sebuah proyek
  2. Aktifkan Google Places API for iOS
  3. Buat kunci yang sesuai
Lanjutkan

Place Autocomplete

Layanan pelengkapan otomatis dalam Google Places API for iOS mengembalikan prediksi tempat sebagai respons terhadap kueri penelusuran pengguna. Saat pengguna mengetikkan, layanan pelengkapan otomatis akan mengembalikan usulan untuk tempat seperti bisnis, alamat, dan tempat menarik.

Anda bisa menambahkan pelengkapan otomatis ke aplikasi dengan cara berikut:

Tambahkan kontrol UI pelengkapan otomatis

Kontrol UI pelengkapan otomatis adalah sebuah dialog penelusuran dengan fungsionalitas pelengkapan otomatis bawaan. Saat pengguna memasukkan istilah penelusuran, kontrol tersebut akan menampilkan daftar pilihan tempat yang telah diprediksi. Bila pengguna telah membuat pilihan, sebuah instance GMSPlace akan dikembalikan, yang kemudian bisa digunakan aplikasi Anda untuk mendapatkan detail tentang tempat yang dipilih.

Anda bisa menambahkan kontrol UI pelengkapan otomatis ke aplikasi dengan cara berikut:

Tambahkan kontrol layar penuh

Gunakan kontrol layar penuh bila Anda ingin konteks modal, di mana UI pelengkapan otomatis untuk sementara menggantikan UI aplikasi Anda hingga pengguna membuat pilihan. Fungsionalitas ini disediakan oleh kelas GMSAutocompleteViewController. Bila pengguna memilih sebuah tempat, aplikasi Anda akan menerima callback.

Untuk menambahkan kontrol layar penuh ke aplikasi Anda:

  1. Buat elemen UI di aplikasi utama untuk meluncurkan kontrol UI pelengkapan otomatis, misalnya penangan sentuhan pada UIButton.
  2. Implementasikan protokol GMSAutocompleteViewControllerDelegate di pengontrol tampilan induk.
  3. Buat instance GMSAutocompleteViewController dan tetapkan pengontrol tampilan induk sebagai properti delegate.
  4. Tampilkan GMSAutocompleteViewController menggunakan [self presentViewController...].
  5. Tangani pilihan pengguna dalam metode delegate didAutocompleteWithPlace.

  6. Hilangkan pengontrol di metode delegate didAutocompleteWithPlace, didFailAutocompleteWithError, dan wasCancelled.

Contoh berikut memperagakan satu cara memungkinkan untuk meluncurkan GMSAutocompleteViewController sebagai respons terhadap pengetukan tombol oleh pengguna.

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

Tambahkan pengontrol hasil

Gunakan pengontrol hasil bila Anda ingin kontrol yang lebih besar atas UI masukan teks. Pengontrol hasil secara dinamis beralih visibilitas daftar hasil berdasarkan pada fokus UI masukan.

Untuk menambahkan pengontrol hasil ke aplikasi Anda:

  1. Buat GMSAutocompleteResultsViewController.
  2. Implementasikan protokol GMSAutocompleteResultsViewControllerDelegate di pengontrol tampilan induk dan berikan pengontrol tampilan induk sebagai properti delegate.
  3. Buat sebuah objek UISearchController, dengan meneruskan GMSAutocompleteResultsViewController sebagai argumen pengontrol hasil.
  4. Setel GMSAutocompleteResultsViewController sebagai properti searchResultsUpdater dari UISearchController.
  5. Tambahkan searchBar untuk UISearchController ke UI aplikasi Anda.
  6. Tangani pilihan pengguna dalam metode delegate didAutocompleteWithPlace.

Ada sejumlah cara untuk menempatkan bilah penelusuran UISearchController ke dalam UI aplikasi Anda:

Tambahkan bilah penelusuran ke bilah navigasi

Contoh kode berikut memperagakan menambahkan pengontrol hasil, menambahkan searchBar ke bilah navigasi, dan menangani pilihan pengguna:

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;
}

Catatan: Agar bilah penelusuran ditampilkan dengan benar, pengontrol tampilan aplikasi Anda harus dimasukkan dalam UINavigationController.

Tambahkan bilah penelusuran ke bagian atas tampilan

Contoh kode berikut menampilkan penambahan searchBar ke bagian atas tampilan.

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;
}

Secara default, UISearchController menyembunyikan bilah navigasi saat menampilkan (ini bisa dinonaktifkan). Dalam hal di mana bilah navigasi terlihat dan buram, UISearchController tidak menyetel penempatan dengan benar. Gunakan kode berikut sebagai solusi:

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;

Tambahkan bilah penelusuran menggunakan hasil popover

Contoh kode berikut menampilkan penempatan bilah penelusuran di sisi kanan bilah navigasi, dan menampilkan hasilnya di popover.

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;
}

Catatan: Agar bilah penelusuran ditampilkan dengan benar, pengontrol tampilan aplikasi Anda harus dimasukkan dalam UINavigationController.

Gunakan sumber data tabel

Jika aplikasi Anda harus mendukung iOS 7, Anda bisa menggunakan kelas GMSAutocompleteTableDataSource untuk mengendalikan tampilan tabel UISearchDisplayController.

Untuk menggunakan GMSAutocompleteTableDataSource guna menampilkan pengontrol penelusuran:

  1. Implementasikan protokol GMSAutocompleteTableDataSourceDelegate dan UISearchDisplayDelegate di pengontrol tampilan induk.
  2. Buat instance GMSAutocompleteTableDataSource dan tetapkan pengontrol tampilan induk sebagai properti delegate.
  3. Buat instance UISearchDisplayController.
  4. Tambahkan searchBar untuk UISearchController ke UI aplikasi Anda.
  5. Tangani pilihan pengguna dalam metode delegate didAutocompleteWithPlace.

  6. Hilangkan pengontrol di metode delegate didAutocompleteWithPlace, didFailAutocompleteWithError, dan wasCancelled.

Contoh kode berikut memperagakan penggunaan kelas GMSAutocompleteTableDataSource untuk mengendalikan tampilan tabel 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];
}

Catatan: UISearchDisplayController API tidak mendukung konsep pembaruan data asinkron, jadi harus memaksa pembaruan tabel dengan memuat ulang data tabel dalam metode didUpdateAutocompletePredictions dan didRequestAutocompletePredictions protokol GMSAutoCompleteResultsDelegate.

Sesuaikan warna teks dan latar belakang

Anda bisa menyetel warna semua teks dan latar belakang di kontrol UI pelengkapan otomatis, untuk membuat widget semakin cocok dengan penampilan visual aplikasi Anda. Ada dua cara untuk menyetel warna kontrol UI:

  • Dengan menggunakan UIAppearance protocol iOS asli untuk menata gaya kontrol UI secara global bila memungkinkan. Setelan ini berlaku pada banyak, namun tidak semua, elemen kontrol UI.
  • Dengan menggunakan berbagai metode SDK pada kelas widget untuk menyetel properti yang tidak didukung oleh UIAppearance protocol.

Biasanya, aplikasi Anda akan menggunakan semacam kombinasi UIAppearance protocol dan metode SDK. Diagram berikut menampilkan elemen mana saja yang bisa diberi gaya:

Warna kontrol UI pelengkapan otomatis

Tabel berikut mencantumkan semua elemen UI, dan menunjukkan bagaimana setiap elemen harus ditata gayanya (protokol UIAppearance atau metode SDK).

Elemen UI Metode Cara menata gaya
Arsiran bilah navigasi (latar belakang) Protokol UIAppearance Panggil setBarTintColor pada proxy UINavigationBar.
Warna arsiran Bilah Navigasi (tanda sisipan teks bilah penelusuran dan tanda sisipan) Protokol UIAppearance Panggil setTintColor pada proxy UINavigationBar.
Warna teks Bilah Penelusuran Protokol UIAppearance Setel NSForegroundColorAttributeName di searchBarTextAttributes.
Warna arsiran bilah penelusuran N/A Bilah penelusuran tembus pandang, dan akan menampilkan versi berarsir dari Bilah Navigasi.
Warna teks placeholder bilah penelusuran (teks penelusuran default) Protokol UIAppearance Setel NSForegroundColorAttributeName di placeholderAttributes.
Teks utama (juga berlaku pada teks pesan dan kesalahan) Metode SDK Panggil primaryTextColor.
Sorotan teks utama Metode SDK Panggil primaryTextHighlightColor.
Teks sekunder Metode SDK Panggil secondaryTextColor.
Teks pesan dan kesalahan Metode SDK Panggil primaryTextColor.
Latar belakang sel tabel Metode SDK Panggil tableCellBackgroundColor.
Warna pemisah sel tabel Metode SDK Panggil tableCellSeparatorColor.
Tombol "Try Again" Metode SDK Panggil tintColor.
Indikator aktivitas (spinner kemajuan) Protokol UIAppearance Panggil setColor pada proxy UIActivityIndicatorView.
Logo "Diberdayakan oleh Google", Gambar awan sedih N/A Versi putih atau abu-abu secara otomatis dipilih berdasarkan kontras latar belakang.
Ikon kaca pembesar dan ikon teks jernih di bidang teks Bilah Penelusuran N/A Untuk menata gaya, ganti gambar default dengan gambar berwarna yang diinginkan.

Catatan: Properti ini hanya memengaruhi setelan warna elemen UI. Mengubah ukuran elemen UI, atau font yang digunakan dalam sel tabel, tidak didukung.

Gunakan protokol UIAppearance

Anda bisa menggunakan UIAppearance protocol untuk mendapatkan proxy penampilan bagi elemen UI yang diberikan, yang kemudian bisa Anda gunakan untuk menyetel warna elemen UI. Bila modifikasi telah dibuat, semua instance elemen UI yang diberikan akan terpengaruh. Misalnya, contoh berikut secara global mengubah warna teks kelas UITextField menjadi hijau bila dimuat dalam UISearchBar:

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

Untuk informasi selengkapnya tentang mendefinisikan nilai-nilai warna, perhatikan Referensi Kelas UIColor.

Cuplikan kode berikut menampilkan semua perintah proxy yang perlu Anda gunakan untuk menata gaya apa saja yang ada di kontrol UI pelengkapan otomatis layar penuh. Tambahkan kode ini ke metode didFinishLaunchingWithOptions di 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;

Setel properti gaya kontrol UI

Subset elemen kontrol UI memiliki properti yang tidak dipengaruhi oleh protokol UIAppearance, dan juga harus disetel secara langsung. Contoh kode berikut menampilkan definisi warna latar belakang dan latar depan, serta menerapkannya ke instance kontrol UI bernama acController. Tambahkan kode ini ke metode onLaunchClicked di 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;

Catatan: Untuk GMSAutocompleteViewController dan GMSAutocompleteResultsViewController, Anda bisa menggunakan Interface Builder untuk menyetel nilai-nilai ini.

Mendapatkan prediksi tempat lewat program

Anda bisa membuat UI penelusuran khusus sebagai alternatif untuk UI yang disediakan oleh widget pelengkapan otomatis. Caranya, aplikasi Anda harus mendapatkan prediksi tempat lewat program. Aplikasi Anda bisa mendapatkan daftar prediksi nama tempat dan/atau alamat dengan salah satu cara berikut:

Panggil GMSPlacesClient

Untuk mendapatkan daftar nama tempat dan/atau alamat yang diprediksi, panggil metode GMSPlacesClient autocompleteQuery:bounds:filter:callback: dengan parameter berikut:

  • String autocompleteQuery berisi teks yang diketikkan oleh pengguna.
  • Objek GMSCoordinateBounds mencondongkan hasil ke area tertentu yang ditetapkan oleh batas garis lintang dan garis bujur.
  • GMSAutocompleteFilter membatasi hasil pada tipe tempat tertentu. Untuk mengambil semua tipe, berikan nilai nol. Tipe tempat berikut ini didukung dalam filter:

    • kGMSPlacesAutocompleteTypeFilterNoFilter – Filter kosong; semua hasil dikembalikan.
    • kGMSPlacesAutocompleteTypeFilterGeocode – Hanya mengembalikan hasil geocoding, bukan bisnis. Gunakan permintaan ini untuk menghilangkan kerancuan hasil bila lokasi yang ditetapkan mungkin tidak pasti.
    • kGMSPlacesAutocompleteTypeFilterAddress – Hanya mengembalikan hasil pelengkapan otomatis dengan alamat yang akurat. Gunakan tipe ini bila Anda mengetahui pengguna sedang mencari alamat yang ditetapkan secara lengkap.
    • kGMSPlacesAutocompleteTypeFilterEstablishment – Hanya mengembalikan tempat yang berupa bisnis.
    • kGMSPlacesAutocompleteTypeFilterRegion – Hanya mengembalikan tempat yang cocok dengan salah satu tipe berikut:

      • locality
      • sublocality
      • postal_code
      • country
      • administrative_area_level_1
      • administrative_area_level_2
    • kGMSPlacesAutocompleteTypeFilterCity – Hanya mengembalikan hasil yang cocok dengan locality atau administrative_area_level_3.

Untuk informasi selengkapnya, lihat tipe tempat.

  • Metode callback untuk menangani prediksi yang dikembalikan.

Contoh kode di bawah ini menampilkan panggilan yang disederhanakan untuk 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);
                          }
                        }];
}

API akan memanggil metode callback yang ditetapkan, dengan meneruskan larik objek GMSAutocompletePrediction.

Setiap objek GMSAutocompletePrediction berisi informasi berikut:

  • attributedFullText – Teks lengkap prediksi, dalam bentuk sebuah NSAttributedString. Misalnya, 'Sydney Opera House, Sydney, New South Wales, Australia'. Setiap kisaran teks yang cocok dengan masukan pengguna memiliki atribut, kGMSAutocompleteMatchAttribute. Anda bisa menggunakan atribut ini untuk menyorot teks yang cocok dalam kueri pengguna, misalnya, seperti yang ditampilkan di bawah ini.
  • placeID – ID tempat yang diprediksi. ID tempat adalah identifier tekstual yang secara unik mengidentifikasi tempat. Untuk informasi selengkapnya tentang ID tempat, lihat ringkasan ID tempat.

Contoh kode berikut mengilustrasikan cara menyorot dengan teks tebal bagian dari hasil yang cocok dengan teks dalam kueri pengguna, dengan menggunakan 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;
    

Gunakan fetcher

Jika Anda ingin membangun sendiri kontrol pelengkapan otomatis dari nol, Anda bisa menggunakan GMSAutocompleteFetcher, yang membungkus metode autocompleteQuery pada GMSPlacesClient. Fetcher melakukan throttle pada permintaan, yang hanya mengembalikan hasil untuk teks penelusuran yang baru saja dimasukkan. Ini tidak menyediakan elemen UI.

Untuk mengimplementasikan GMSAutocompleteFetcher, lakukan langkah-langkah berikut:

  1. Implementasikan protokol GMSAutocompleteFetcherDelegate.

  2. Buat objek GMSAutocompleteFetcher.

  3. Panggil sourceTextHasChanged pada fetcher sebagai tipe pengguna.
  4. Tangani prediksi dan kesalahan dengan menggunakan metode protokol didAutcompleteWithPredictions dan didFailAutocompleteWithError.

Contoh kode berikut memperagakan penggunaan fetcher untuk mengambil masukan pengguna dan menampilkan tempat yang cocok dengan tampilan teks. Fungsionalitas untuk memilih tempat telah dihilangkan. FetcherSampleViewController diperoleh dari UIViewController di 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

Setel GMSCoordinateBounds pelengkapan otomatis

Anda bisa memberikan GMSCoordinateBounds ke pelengkapan otomatis untuk memandu penyelesaian yang diberikan. Misalnya, jika Anda sudah memiliki Google Map dalam pengontrol tampilan, Anda bisa menggunakan batas-batas tampilan yang terlihat saat ini untuk mencondongkan hasil pelengkapan otomatis.

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);
                          }
                        }];
}

Batas penggunaan

Tampilkan atribusi dalam aplikasi Anda

  • Jika aplikasi Anda menggunakan layanan pelengkapan otomatis lewat program, UI Anda harus menampilkan atribusi 'Diberdayakan oleh Google', atau muncul dalam peta bermerek Google.
  • Jika aplikasi Anda menggunakan kontrol UI pelengkapan otomatis, maka tidak diperlukan aksi tambahan (atribusi yang diperlukan akan ditampilkan secara default).
  • Jika Anda mengambil dan menampilkan tambahan informasi tempat setelah mendapatkan tempat melalui ID, Anda juga harus menampilkan atribusi pihak ketiga.

Untuk detail selengkapnya, lihat dokumentasi mengenai atribusi.

Mengontrol indikator aktivitas jaringan

Untuk mengontrol indikator aktivitas jaringan di bilah status aplikasi, Anda harus mengimplementasikan metode delegate opsional yang sesuai untuk kelas pelengkapan otomatis yang Anda gunakan dan mengaktifkan serta menonaktifkan sendiri indikator jaringan.

  • Untuk GMSAutocompleteViewController Anda harus mengimplementasikan metode delegate didRequestAutocompletePredictions: dan didUpdateAutocompletePredictions:.
  • Untuk GMSAutocompleteResultsViewController Anda harus mengimplementasikan metode delegate didRequestAutocompletePredictionsForResultsController: dan didUpdateAutocompletePredictionsForResultsController:.
  • Untuk GMSAutocompleteTableDataSource Anda harus mengimplementasikan metode delegate didRequestAutocompletePredictionsForTableDataSource: dan didUpdateAutocompletePredictionsForTableDataSource:.

Dengan mengimplementasikan semua metode ini dan menyetel [UIApplication sharedApplication].networkActivityIndicatorVisible ke YES dan NO masing-masing, bilah status akan dicocokkan dengan benar ke UI pelengkapan otomatis.

Pemecahan Masalah

Walaupun ada berbagai macam kesalahan bisa terjadi, mayoritas kesalahan yang mungkin dialami aplikasi Anda disebabkan oleh kesalahan konfigurasi (misalnya, kunci API yang digunakan salah, atau kunci API tidak dikonfigurasi dengan benar), atau kesalahan kuota (aplikasi Anda telah melebihi kuotanya). Lihat Batas Penggunaan untuk informasi selengkapnya tentang kuota.

Kesalahan yang terjadi dalam penggunaan kontrol pelengkapan otomatis dikembalikan dalam metode didFailAutocompleteWithError() untuk beragam protokol delegate. Properti code untuk objek NSError yang diberikan disetel ke salah satu nilai enumerasi GMSPlacesErrorCode.

Kirim masukan tentang...

location_on
Google Places API for iOS