【发布时间】:2021-06-06 06:01:44
【问题描述】:
我正在使用 SwiftUI 新地图视图来显示注释的图钉,并希望在单击图钉时显示用于编辑注释名称和描述的视图。
我尝试将 MapAnnotation 与包含带有图钉图像的按钮的视图一起使用。图像显示正确,但按钮不起作用。
是否可以在不回退到 MKMapView 的 UIViewRepresentable 的情况下做到这一点?
import SwiftUI
import MapKit
struct ContentView: View {
@State private var showingEditScreen = false
@State private var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: 37.334722,
longitude: -122.008889),
span: MKCoordinateSpan(latitudeDelta: 1,
longitudeDelta: 1)
)
@State private var pins: [Pin] = [
Pin(name: "Apple Park",
description: "Apple Inc. headquarters",
coordinate: CLLocationCoordinate2D(latitude: 37.334722,
longitude:-122.008889))
]
var body: some View {
Map(coordinateRegion: $region,
interactionModes: .all,
annotationItems: pins,
annotationContent: { pin in
MapAnnotation(coordinate: pin.coordinate,
content: {
PinButtonView(pin: pin)
})
})
}
}
我的 Pin 定义:
struct Pin: Identifiable {
let id = UUID()
var name: String
var description: String
var coordinate: CLLocationCoordinate2D
}
带有按钮和图钉图像的视图:
struct PinButtonView: View {
@State private var showingEditScreen = false
@State var pin: Pin
var body: some View {
Button(action: {
showingEditScreen.toggle()
}) {
Image(systemName: "mappin")
.padding()
.foregroundColor(.red)
.font(.title)
}
.sheet(isPresented: $showingEditScreen,
content: {
EditView(pin: self.$pin)
})
}
}
编辑视图:
struct EditView: View {
@Environment(\.presentationMode) var presentationMode
@Binding var pin: Pin
var body: some View {
NavigationView {
Form {
TextField("Place name", text: $pin.name)
TextField("Description", text: $pin.description)
}
.navigationTitle("Edit place")
.navigationBarItems(trailing: Button("Done") {
self.presentationMode.wrappedValue.dismiss()
})
}
}
}
【问题讨论】:
-
我有一个带有地图视图和单个 MapAnnotation 的应用程序,我能够点击 MapAnnotation 来显示附加信息。此地图视图是导航堆栈上的推送视图,但是,如果我滚动地图视图,我将无法再点击 MapAnnotation,但如果我点击 MapAnnotation 所在的位置,MapAnnotation 仍会收到点击。在我的应用程序的另一部分,我有一个带有多个 MapAnnotation 的地图视图。我无法点击其中任何一个,地图视图都可以看到这些点击。此视图不在导航堆栈上。
-
谢谢,@JeffZacharias 我将 Map 放在 NavigationView 中,但仍然无法正常工作,甚至尝试将按钮更改为导航链接,但没有成功。您能否详细说明您是如何制作可点击的 MapAnnotation 的?
-
您是否将其放在 NavigationView 中,然后推送到具有地图和注释的第二个视图?如果它只是在 NavigationView 中,它对我不起作用,它必须在第二个推送视图中。
-
@JeffZacharias 尝试了你的建议,不出所料,滚动地图时得到了相同的行为。希望 Apple 将在未来的版本中修复这些故障。谢谢。
-
有人找到办法了吗?我正在努力解决,但到目前为止没有成功...