我正在练习和阅读SwiftUI
,我开始制作一个简单的应用程序,您可以在其中将位置输入到TextField
视图中swiftUI
,然后再次进入mkmapview
内部SwiftUI
将转到我搜索的位置。我似乎一辈子都无法掌握如何使用我的mkmapview
.
此外,我什至找不到在Textfield
不进行导航或渲染新视图或删除视图的情况下关闭键盘的方法。
谁能指出我如何关闭我的键盘?我习惯了resignFirstResponder()
或didFinishEditing()
。
另外,是否有人对如何为MKMapView
from分配功能有任何建议,swiftUI
或者我认为这一切都错了?
我想在我的 Textfield 的 onCommit 处理程序中,我会调用一个函数,该函数可以将必要的数据传递给MapView
并处理它,但我无法找到一个好的方法来做到这一点。
struct MainView : View {
@State var text: String = ""
var body: some View {
VStack {
MapView()
.frame(height: UIScreen.main.bounds.height)
.offset(y: 50)
//.edgesIgnoringSafeArea(.top)
SearchField(text: "")
.offset(y: -(UIScreen.main.bounds.height) + 60)
.padding()
}
}
}
struct MapView : UIViewRepresentable {
func makeUIView(context: Context) -> MKMapView {
MKMapView(frame: .zero)
}
func updateUIView(_ view: MKMapView, context: Context) {
let coordinate = CLLocationCoordinate2D(
latitude: 34.011286, longitude: -116.166868)
let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
let region = MKCoordinateRegion(center: coordinate, span: span)
view.setRegion(region, animated: true)
}
}
struct SearchField : View {
@State var text: String
@State var showDetails: Bool = false
var body: some View {
VStack {
RoundedRectangle(cornerRadius: 30).frame(width: 300, height: 40)
.foregroundColor(.white)
.offset(y: 55)
TextField($text, placeholder: Text("City, State, or Address"), onEditingChanged: { body in
print(body)
}, onCommit: {
print(self.text)
})
.padding()
.offset(x: 50)
}
}
}
*编辑注意:我上面的代码有效,它将构建一个带有文本字段的全屏地图视图,并且文本字段接受文本并更新它的状态。我的问题是关于如何通过获取 mapview 的功能并在返回时隐藏我该死的键盘来继续前进