2

这是我的 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

它确实被调用,但什么也不做。

我也试过在协调员中打电话

view.viewController().navigationController.popViewController(animated: true)

(viewController() 是获取任何视图的 viewController 的扩展)

这也无济于事。

想法?

4

1 回答 1

1

如果您使用所有者视图(即您的可代表)创建协调器,则在需要时尝试直接调用

ownerView.presentationMode.wrappedValue.dismiss()
于 2020-05-31T03:11:11.190 回答