SwiftUI получает, какая аннотация объекта была нажата на карте. Основные данные
я пытался сделать так, чтобы при нажатии аннотации на карте, созданной объектом Core Data, отображалось LocationPreviewView(fish: fish)
. Итак, как я могу получить выбранный элемент и передать его в LocationPreviewView()
?
я уже пытался это сделать через UIViewRepresentable
кстати и уже писал об этом, но безуспешно.
import SwiftUI
import MapKit
import CoreData
import CoreLocationUI
import StoreKit
struct MapMainView: View {
//???
@State private var selectedFish: Fish?
@Environment(\.managedObjectContext) private var moc
@ObservedObject var locationManager = LocationManager.shared
@State private var region = MKCoordinateRegion(center: LocationManager.currentLocation, span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1))
var body: some View {
ZStack {
Map(coordinateRegion: $region,
interactionModes: .all,
showsUserLocation: true,
annotationItems: annotations) {
MapMarker(coordinate: $0.coordinate)
}
.ignoresSafeArea()
VStack(spacing: 0) {
ZStack {
ForEach(fetchFish()) { fish in
// Here pass the selected fish?????????
LocationPreviewView(fish: fish)
.shadow(color: Color.black.opacity(0.3), radius: 20)
.padding()
.transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))
}
}
}
}
}
var annotations: [FishAnnotation] {
let fish = fetchFish()
return fish.map { FishAnnotation(name: $0.title ?? "No data found", coordinate: CLLocationCoordinate2D(latitude: $0.lat, longitude: $0.long)) }
}
func fetchFish() -> [Fish] {
let request: NSFetchRequest<Fish> = Fish.fetchRequest()
do {
return try moc.fetch(request)
} catch {
print("Error fetching fish entities: \(error)")
return []
}
}
}
struct MapMainView_Previews: PreviewProvider {
@State static var mapView: MKMapView = MKMapView()
static var previews: some View {
MapMainView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
}
}