Как мне получить два оповещения об одном представлении в SwiftUI? - PullRequest
2 голосов
/ 23 сентября 2019

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

Я использую официальный выпуск Xcode 11 для macOS Catalina.

@State private var showFirstAlert = false
@State private var showSecondAlert = false

Button(action: {
    if Bool.random() {
        showFirstAlert = true
    } else {
        showSecondAlert = true
    }
}) {
    Text("Show random alert")
}
.alert(isPresented: $showFirstAlert) {
    // This alert never shows
    Alert(title: Text("First Alert"), message: Text("This is the first alert"))
}
.alert(isPresented: $showSecondAlert) {
    // This alert does show
    Alert(title: Text("Second Alert"), message: Text("This is the second alert"))
}

Я ожидаю, что появится первое предупреждениекогда для showFirstAlert установлено значение true, и я ожидаю появления второго предупреждения, если для showSecondAlert установлено значение true.Только второе предупреждение показывает, когда его состояние истинно, но первое ничего не делает.

1 Ответ

2 голосов
/ 23 сентября 2019

Второй вызов .alert(isPresented) отменяет первый.Что вам действительно нужно, так это один Binding<Bool> для обозначения того, представлено ли предупреждение, и некоторые настройки, для которых следует возвращать предупреждение после закрытия после .alert(isPresented).Вы можете использовать Bool для этого, но я сделал это с помощью enum, так как это масштабируется до более чем двух предупреждений.

enum ActiveAlert {
    case first, second
}

struct ToggleView: View {
    @State private var showAlert = false
    @State private var activeAlert: ActiveAlert = .first

    var body: some View {

        Button(action: {
            if Bool.random() {
                self.activeAlert = .first
            } else {
                self.activeAlert = .second
            }
            self.showAlert = true
        }) {
            Text("Show random alert")
        }
        .alert(isPresented: $showAlert) {
            switch activeAlert {
            case .first:
                return Alert(title: Text("First Alert"), message: Text("This is the first alert"))
            case .second:
                return Alert(title: Text("Second Alert"), message: Text("This is the second alert"))
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...