如何以编程方式从 SwiftUI 导航堆栈中弹出 UIViewControllerRepresentable
How to pop a UIViewControllerRepresentable from a SwiftUI navigation stack programmatically
这是我的 SwiftUI 设置:
我有一个 SwiftUI 视图(称为 MapSearchView),它有一个包含 NavigationLink 的 NavigationView。
var body: some View {
VStack {
NavigationView {
Form {
Section (header: Text("Location")){
NavigationLink (locationString, destination: GooglePlacesViewController(mapTools: $mapTools))
}...
NavigationLink 的目的地是一个 UIViewControllerRepresentable,它包装了一个 GooglePlacesViewController。当我完成我的 GooglePlaces 搜索时(因为我做了选择或我取消了搜索),我想以编程方式弹出回 MapSearchView。
我尝试在 UIViewControllerRepresentable (GooglePlacesViewController) 中添加以下内容:
@Environment(\.presentationMode) var presentationMode
var popToPrevious : Bool = false {
didSet {
if popToPrevious == true {
self.presentationMode.wrappedValue.dismiss()
}
}
}
并使用
在我的协调器中将 popToPrevious 设置为 true
parent.popToPrevious = true
它确实被调用了,但什么也没做。
我也试过在 Coordinator 中调用
view.viewController().navigationController.popViewController(animated: true)
(viewController() 是为任何视图获取 viewController 的扩展)
这也没有任何作用。
想法?
如果您使用所有者视图(即您的代表)创建协调器,则在需要时尝试直接调用
ownerView.presentationMode.wrappedValue.dismiss()
这是我的 SwiftUI 设置:
我有一个 SwiftUI 视图(称为 MapSearchView),它有一个包含 NavigationLink 的 NavigationView。
var body: some View {
VStack {
NavigationView {
Form {
Section (header: Text("Location")){
NavigationLink (locationString, destination: GooglePlacesViewController(mapTools: $mapTools))
}...
NavigationLink 的目的地是一个 UIViewControllerRepresentable,它包装了一个 GooglePlacesViewController。当我完成我的 GooglePlaces 搜索时(因为我做了选择或我取消了搜索),我想以编程方式弹出回 MapSearchView。
我尝试在 UIViewControllerRepresentable (GooglePlacesViewController) 中添加以下内容:
@Environment(\.presentationMode) var presentationMode
var popToPrevious : Bool = false {
didSet {
if popToPrevious == true {
self.presentationMode.wrappedValue.dismiss()
}
}
}
并使用
在我的协调器中将 popToPrevious 设置为 trueparent.popToPrevious = true
它确实被调用了,但什么也没做。
我也试过在 Coordinator 中调用
view.viewController().navigationController.popViewController(animated: true)
(viewController() 是为任何视图获取 viewController 的扩展)
这也没有任何作用。
想法?
如果您使用所有者视图(即您的代表)创建协调器,则在需要时尝试直接调用
ownerView.presentationMode.wrappedValue.dismiss()