Как подать оповещение с помощью swiftUI - PullRequest
7 голосов
/ 04 июня 2019

В swiftUI я обнаружил тип Alert.Но мне интересно, как показать это с помощью метода presentation.

Инициализация Alert довольно проста.Но как использовать привязку?

struct ContentView : View {
    var body: some View {
        Button(action: {
            // Don't know how to use the `binding` below
            presentation(binding, alert: {
                Alert(title: Text("Hello"))
            })
        }, label: {
            Text("asdf")
        })
    }
}

Связывание имеет тип Binding<Bool>

Ответы [ 3 ]

9 голосов
/ 04 июня 2019

Вы можете использовать переменную @State в качестве привязки.В качестве альтернативы вы можете использовать переменную @EnvironmentObject, которая использует BindableObject.

. Я думаю, вам нужно вызвать presentation в корневом представлении, чтобы заставить его работать, добавив его к Stack, Group и т. Д., Похоже, не работает.

Этот фрагмент, похоже, помогает.Обратите внимание, что для переменной @State задано значение false после прекращения оповещения.

struct ContentView: View {

    @State var showsAlert = false

    var body: some View {
        Button(action: {
            self.showsAlert = true
        }, label: {
            Text("asdf")
        }).presentation($showsAlert, alert: {
            Alert(title: Text("Hello"))
        })
    }
}
0 голосов
/ 10 июня 2019

В дополнение к ответу @ tsp, чтобы отобразить предупреждение с двумя кнопками и обработать действие нажатия кнопки, вы можете сделать следующее:

@State var showAlert = false

var body: some View {
  Button(action: {
    self.showAlert = true
  }) {
    Text("Show Alert")
  }
  .presentation($showAlert) {
      Alert(title: Text("Title"), message: Text("Message..."),
          primaryButton: .default (Text("OK")) {
            print("OK button tapped")
          },
          secondaryButton: .cancel()
      )
  }
}

Результат:

enter image description here

0 голосов
/ 07 июня 2019
struct ContentView: View {

    @State var aAlert = false

    var body: some View {
        Text("Alert").tapAction {
            self.aAlert = true
        }.presentation($aAlert, alert:{ Alert(title: Text("Alert"))})
    }
}
...