Я не могу закрыть модал с помощью кнопки и открыть его снова с панели навигации - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь закрыть Модал изнутри Модала. Уловка в том, что я хочу открыть модал от NavigationBarItem. Я предоставил некоторый демонстрационный код и случаи, когда он работает, а где нет:

Дело 01

1. Openning from NavigationBarItem
2. Closing by pressing Button in Modal
3. Openning again from Button -> WORKS

Дело 02

1. Openning from NavigationBarItem
2. Closing by swiping down
3. Openning again from NavigationBarItem -> WORKS

Случай 03

1. Openning from Button
2. Closing from Button
3. Openning again from NavigationBarItem -> DOESNT WORK

-> Проблема заключается в том, что при закрытии нажатием кнопки модальное окно закрывается, но все еще помечается как активное вфон. При последующем нажатии кнопки NavigationBarButton я получаю эту ошибку в консоли:

Warning: Attempt to present <_TtGC7SwiftUIP13$7fff2c684d1c22SheetHostingControllerVS_7AnyView_: 0x7f9a6c52b3c0>  on <UINavigationController: 0x7f9a6d85c200> which is already presenting (null)

, вот код:

struct TestView: View {

    @State var showModal: Bool = false

    var body: some View {
        NavigationView {
            Button(action: {
                self.showModal.toggle()
            }) {
                Text("Show Modal")
            }.sheet(isPresented: $showModal) {
                ModalView()
            }
            .navigationBarItems(trailing:
                Button(action: {
                    self.showModal.toggle()
                }) {
                    Text("Show Modal")
                }.sheet(isPresented: $showModal) {
                    ModalView()
                }
            )
        }
    }
}

struct ModalView: View {
    @Environment(\.presentationMode) var presentationMode

    func dismiss() {
        self.presentationMode.wrappedValue.dismiss()
    }

    var body: some View {
        Button(action: {
            self.dismiss()
        }) {
            Text("Save").bold()
        }
    }
}

1 Ответ

0 голосов
/ 16 октября 2019

Была эта проблема, и я сделал следующее:


struct TestView: View {

    @State var showModal: Bool = false

    var body: some View {
        NavigationView {
            Button(action: {
                self.showModal.toggle()
            }) {
                Text("Show Modal")
            }
            .navigationBarItems(trailing:
                Button(action: {
                    self.showModal.toggle()
                }) {
                    Text("Show Modal")
                }
            )
        }.sheet(isPresented: $showModal) {
            ModalView()
        }
    }
}

struct ModalView: View {
    @Environment(\.presentationMode) var presentationMode

    func dismiss() {
        self.presentationMode.wrappedValue.dismiss()
    }

    var body: some View {
        Button(action: {
            self.dismiss()
        }) {
            Text("Save").bold()
        }
    }
}


Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...