Как отобразить два оповещения в быстром пользовательском интерфейсе, за которым следуют другие - PullRequest
0 голосов
/ 08 марта 2020

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

struct ContentView: View {
@State private var showingAlert = false
@State private var showingAlertII = false

var body: some View {
        Button(action: {
            self.showingAlert = true
        }, label: {
            Text("button")
                .alert(isPresented: $showingAlert) {
                    Alert(title: Text("Option one or two"), message: Text("choose"), primaryButton: .default(Text("one"), action: {

        // do some specific actions
                        self.showingAlertII = true
                    }), secondaryButton: .default(Text("two"), action: {
                       //do some other stuff
                        self.showingAlertII = true
                    }))

            }
            .alert(isPresented: $showingAlertII) {
                    Alert(title: Text("Option A or B"), message: Text("choose"), primaryButton: .default(Text("Split"), action: {
                        // do something
                    }), secondaryButton: .default(Text("B"), action: {
                        //do something 
                    }))

            }
        })

Предупреждение не отображается. Обратите внимание, что есть другой учебник: Как я могу иметь два оповещения для одного представления в SwiftUI? , аналогично этому, однако использование нотации .first и возврат того или иного не будет работать для меня, потому что я хочу, чтобы оба показываться один за другим.

1 Ответ

2 голосов
/ 08 марта 2020

Вы не можете сделать два вызова .alert непосредственно друг за другом, не перезаписав один из них. Ключ в том, чтобы получить все логи c внутри одного вызова .alert.

import SwiftUI

enum ActiveAlert {
    case first, second, third
}

struct ContentView: View {
    @State private var showingAlert = false
    @State private var activeAlert: ActiveAlert = .first

    var body: some View {
        Button(action: {
            self.showAlert(.first)
        }, label: {
            Text("button")
            .alert(isPresented: $showingAlert) {
                switch activeAlert {
                    case .first:
                        return Alert(title: Text("First Alert"), dismissButton: .default(Text("Next"), action: {
                            self.showAlert(.second)
                        }))
                    case .second:
                        return Alert(title: Text("Second Alert"), dismissButton: .default(Text("Next"), action: {
                            self.showAlert(.third)
                        }))
                    case .third:
                        return Alert(title: Text("Third Alert"), dismissButton: .default(Text("Ok"), action: {
                            //...
                        }))
                }
            }
        })
    }

    func showAlert(_ active: ActiveAlert) -> Void {
        DispatchQueue.global().async {
            self.activeAlert = active
            self.showingAlert = true
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...