Erweiterte „Place Search“-Komponente
Die erweiterte Version der „Place Search“-Komponente bietet dieselben Funktionen wie Place Search Essentials. Außerdem können Sie die Aktionsschaltflächen der Komponente konfigurieren und Such- und Filteroptionen auf die angezeigten Rezensionen und Medien anwenden.
Erweiterte Konfiguration der Ortssuche
ÜberAdvancedPlaceSearchView können Sie auf erweiterte Funktionen zugreifen.
Aktionsschaltflächen konfigurieren
Verwenden Sie die Methoden .cornerActions und .mainActions von AdvancedPlaceSearchView, um die Aktionsschaltflächen zu entfernen oder anzupassen.
Anforderungen bezüglich visueller Quellenangaben
Wichtig:Sie müssen Nutzern deutlich mitteilen, wenn über eine benutzerdefinierte Aktionsschaltfläche Nutzerinformationen an einen anderen Drittanbieter als Google weitergegeben werden. Weitere Informationen zu den Anforderungen an die visuelle Quellenangabe
Das Beispiel zeigt ein benutzerdefiniertes Bild, das deutlich macht, dass Nutzerinformationen an „Altostrat“ gesendet werden.
Such- und Filteroptionen anwenden
Verwenden Sie die Methoden .searchMediaOptions und .searchReviewOptions von AdvancedPlaceSearchView, um die Suche und Filterung von Medien oder Rezensionen zu ermöglichen.
Erweiterte Beispiele für die Suche nach Orten
Schaltfläche für Hauptaktion erstellen und Eckaktionen entfernen
In diesem Codebeispiel wird eine Schaltfläche für die Hauptaktion erstellt, mit der ein Ort als Favorit markiert oder aus den Favoriten entfernt werden kann. Außerdem wird so sichergestellt, dass keine Eckaktionen konfiguriert sind.
Swift
struct AdvancedPlaceSearchDemoView: View { private let configuration = AdvancedPlaceSearchConfiguration( content: [.address(), .rating(), .type()], preferTruncation: true, // default is false theme: PlacesMaterialTheme(), attributionPosition: .bottom, // default is top mediaSize = .medium, // default is .small selectable: true // default is false ) // can also do let placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request @State private var placeSearchViewRequest = .searchByText( SearchByTextRequest( textQuery: "Googleplex", placeProperties: [.all], locationBias: CircularCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 0 ) ) ) @State private var favoritePlaces: Set<String> = [] var body: some View { AdvancedPlaceSearchView( orientation: .horizontal, // default is vertical request: placeSearchViewRequest, configuration: configuration ) .onLoad { places in print("places: \(places)") } .onRequestError { error in print("error: \(error)") } .onPlaceSelected { place, index in print("place: \(place)") print("index: \(index)") } .mainActions { place in var actions: [MainPlaceActionElement] = [] let placeID = place.placeID! if self.favoritePlaces.contains(placeID) { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart.fill"), label: "Unfavorite" ) { _ in self.toggleFavorite(placeID) } ) ) } else { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart"), label: "Favorite" ) { _ in self.toggleFavorite(placeID) } ) ) } actions.append(.actionId(.openMap(style: .primary))) return actions } // Ensures that there are no corner actions. .cornerActions { _ in return [] } } func toggleFavorite(_ placeID: String) { if favoritePlaces.contains(placeID) { favoritePlaces.remove(placeID) } else { favoritePlaces.insert(placeID) } } }
Rezensionen und Medien filtern
In diesem Codebeispiel werden Suchergebnisse gefiltert, sodass nur Medien und Rezensionen angezeigt werden, in denen „Kaffee“ erwähnt wird.
Swift
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" // Query for loading the place details component. @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) let searchMediaOptions = SearchMediaOptions(query: "coffee", rankPreference: .newest) let searchReviewOptions = SearchReviewsOptions(query: "coffee", rankPreference: .newest) var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: [.media(), .reviews()], theme: PlacesMaterialTheme() ), placeDetailsCallback: { _ in } ) .searchMediaOptions(searchMediaOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } .searchReviewsOptions(searchReviewsOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } }