LoginSignup
2
3

More than 3 years have passed since last update.

SwiftUI Alertを複数使い分けたい

Posted at

サンプルアプリ

alt

機能

Toggle Switchのある側のAlertを表示します。

alt

Alert複数使い分け

表示されないコード

「Show Alert 2」は表示されます。
「Show Alert 1」は無反応です。

import SwiftUI

struct ContentView: View {
    @State var showAlert = false
    @State var showAlert1 = false
    @State var showAlert2 = false

    var body: some View {
        VStack {
            HStack {
                Text("Alert 1")
                Toggle(isOn: $showAlert) {
                    EmptyView()
                }
                .labelsHidden()
                Text("Alert 2")
            }
            Button(action: {
                if self.showAlert == false {
                    self.showAlert1.toggle()
                }
                else {
                    self.showAlert2.toggle()
                }
            }) {
                Text("Show Alert")
            }
            .alert(isPresented: $showAlert1) {
                Alert(title: Text("Show Alert 1"))
            }
            .alert(isPresented: $showAlert2) {
                Alert(title: Text("Show Alert 2"))
            }
        }
        .padding(8.0)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

表示されるコード

import SwiftUI

struct ContentView: View {
    @State var showAlert = false
    @State var showAlert1and2 = false

    var body: some View {
        VStack {
            HStack {
                Text("Alert 1")
                Toggle(isOn: $showAlert) {
                    EmptyView()
                }
                .labelsHidden()
                Text("Alert 2")
            }
            Button(action: {
                self.showAlert1and2.toggle()
            }) {
                Text("Show Alert")
            }
            .alert(isPresented: $showAlert1and2) {
                switch(showAlert) {
                    case false:
                        return Alert(title: Text("Show Alert 1"))
                    case true:
                        return Alert(title: Text("Show Alert 2"))
                }
            }
        }
        .padding(8.0)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

表示されるコード(Toggleがなかった場合)

import SwiftUI

struct ContentView: View {
    @State var showAlert = false
    @State var showAlert1and2 = false
    @State var alert = 1

    var body: some View {
        VStack {
            HStack {
                Text("Alert 1")
                Toggle(isOn: $showAlert) {
                    EmptyView()
                }
                .labelsHidden()
                Text("Alert 2")
            }
            Button(action: {
                switch(self.showAlert) {
                    case false:
                        self.alert = 1
                    case true:
                        self.alert = 2
                }
                self.showAlert1and2.toggle()
            }) {
                Text("Show Alert")
            }
            .alert(isPresented: $showAlert1and2) {
                switch(alert) {
                    case 1:
                        return Alert(title: Text("Show Alert 1"))
                    case 2:
                        return Alert(title: Text("Show Alert 2"))
                    default:
                        return Alert(title: Text("Error"))
                }
            }
        }
        .padding(8.0)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3