Как подать предупреждение пользователю? - PullRequest
1 голос
/ 08 июня 2019

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

.navigationBarItems(trailing: Button(action: {
      let alert = Alert(title: Text("Add category"), message: Text("Do you want add category?"), primaryButton: Alert.Button.default(Text("Yes"), onTrigger: {
           self.sceneries[0].sceneries.append(Scenery(name: "Name", imageName: "1"))
      }), secondaryButton: Alert.Button.cancel())
      self.presentation(self.$isShownAlert) { () -> Alert in
           return alert
      }
 }, label: {
      Text("Add category")
}))

Но это показывает, что он не используется и оповещение не появилось ...

Ответы [ 2 ]

3 голосов
/ 08 июня 2019

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

Лучший способ сделать это - иметь переменную @State, которая сообщает SwiftUI, должно ли предупреждениебудет отображаться или нет.

Затем действие Button установит его на true, что сделает недействительным body и вызовет перестройку представления.

struct ContentView : View {

    @State var showAlert = false

    var body: some View {
        NavigationView {
            List(0...10) { value in
                Text(verbatim: "\(value)")
            }
            .navigationBarItems(leading: EmptyView(), trailing: Button(action: {
                self.showAlert = true
            }) {
                Text(verbatim: "Show alert")
            })
            .navigationBarTitle(Text(verbatim: "A List"))
        }
        .presentation($showAlert) {
            return Alert(title: Text(verbatim: "An Alert"))
        }
    }

}

В этом примерекнопка устанавливает @State в значение true, и presentation вызывается в представлении навигации.

Результат:

enter image description here

1 голос
/ 08 июня 2019

Для отображения предупреждения двумя кнопками вы можете сделать следующее:

@State var showAlert = false

let alert = Alert(title: Text("Title"), message: Text("Alert message"),
  primaryButton: Alert.Button.default(Text("OK"), 
    onTrigger: {
      print("OK button tapped")
    }
  ), 
  secondaryButton: Alert.Button.cancel()
)

var body: some View {

  NavigationView {
    Text("Content")
      .navigationBarItems(trailing: Button(action: {
        self.showAlert = true
      }, label: {
        Text("Show Alert")
      }).presentation(self.$showAlert, alert: {
        return alert
      })
    )
  }
}

Результат:

enter image description here

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