Как программно извлечь UIViewControllerRepresentable из стека навигации SwiftUI

Вот моя настройка SwiftUI:

У меня есть представление SwiftUI (называемое MapSearchView), в котором есть NavigationView, содержащий NavigationLink.

    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 для любого представления)

Это тоже ничего не делает.

Идеи?

1 ответ

Решение

Если вы создаете Координатора с представлением владельца (то есть с вашим представителем), попробуйте при необходимости позвонить напрямую.

ownerView.presentationMode.wrappedValue.dismiss()
Другие вопросы по тегам