Используя SwiftUI, мы установили кнопку в списке.Почему модальный режим исчезает, когда я нажимаю кнопку, чтобы отобразить модальный режим, а затем снова закрываю ее? - PullRequest
1 голос
/ 25 сентября 2019

Сейчас я учусь создавать пример кода для SwiftUI, используя официальную версию Xcode11.Я написал простой код, чтобы показать и скрыть модальные.Этот код добавляет кнопку в список и отображает модальное.Странно, однако, что модальное больше не появляется, когда кнопка снова нажимается после закрытия.

Есть ли причина для этого или любого решения?

Происходит, когда в списке есть кнопка,но если вы удаляете только код из кода, модальное изображение может отображаться столько раз, сколько вам нужно.

Это код, вызывающий ошибку.

struct ContentView: View {
  @State var show_modal = false
  var body: some View {
    List {
      Button(action: {
        print("Button Pushed")
        self.show_modal = true
      }) {
        Text("Show Modal")
      }.sheet(isPresented: self.$show_modal, onDismiss: {
        print("dismiss")
      }) {
        ModalView()
      }
    }
  }
}

Этокод, который не вызывает ошибку.

struct ContentView: View {
  @State var show_modal = false
  var body: some View {
      Button(action: {
        print("Button Pushed")
        self.show_modal = true
      }) {
        Text("Show Modal")
      }.sheet(isPresented: self.$show_modal, onDismiss: {
        print("dismiss")
      }) {
        ModalView()
      }
  }
}

Единственное отличие состоит в том, существует ли список.

Код ModalView приведен ниже.

struct ModalView: View {
    // 1. Add the environment variable
    @Environment(\.presentationMode) var presentationMode

    var body: some View {
        // 2. Embed Text in a VStack
        VStack {
            // 3. Add a button with the following action
            Button(action: {
                print("dismisses form")
                self.presentationMode.wrappedValue.dismiss()
            }) {
                Text("Dismiss")
            }.padding(.bottom, 50)
            Text("This is a modal")
        }
    }
}

Когда точка останова установлена, print («Button Pressed») вызывается каждый раз, но ModalView из .sheet не вызывается, и, естественно, тело класса ModalView не вызывается.

1 Ответ

0 голосов
/ 25 сентября 2019

Я думаю, проблема в том, что ваш .sheet находится не на самом List, а на Button в вашем коде, который вызывает ошибку.

Попробуйте вместо этого:

struct ContentView: View {
    @State var show_modal = false
    var body: some View {
        List {
            Button(action: {
                print("Button Pushed")
                self.show_modal = true
            }) {
                Text("Show Modal")
            }
        }.sheet(isPresented: self.$show_modal, onDismiss: {
            print("dismiss")
        }) {
            ModalView()
        }
    }
}
...