LoginSignup
0
0

More than 3 years have passed since last update.

SwifUIでボタンを押したか押さないかでAlertの表示を変える

Last updated at Posted at 2021-05-29

前回は、ボタンを2回目押すときは1回目押した時と同じアラートが出てそれを押すと戻るというものでした。
しかし、それでは少しかっこが悪いので、なんとかならないかと調べていたら@cloudsnowさんの投稿
https://qiita.com/cloudsnow/items/0e0e3550c7410971b03d
が自分のやりたいことに近い内容だったため、これを参考にさせていただき作ることができました!

ShowAlertFlagsとflagsの関係を頭の中で整理しないといけないのでとても難しかったです
また、@cloudsnowさんの投稿でもおっしゃていたようにif文だとalertが表示されず、自分のコードの書き方もあると思いますが、上手く行きませんでした。

struct ContentView: View {
    @State var array = ["あいうえお","かきくけこ","さしすせそ","たちつてと","なにぬねの","はひふへほ","まみむめも","やゆよ","らりるれろ","わをん"]
    @State var ShowAlertFlags = Array(repeating: false, count: 10)
    @State var flags = Array(repeating: false, count: 10)


    var body: some View {
            ScrollView{
                ForEach(0..<array.count) { num in
                    Button(action: {
                        self.ShowAlertFlags[num].toggle()
                    }) {
                        Text(array[num])
                                 .font(.title2)
                                     .fontWeight(.black)
                                     .foregroundColor(Color.white)
                                     .multilineTextAlignment(.center)
                                     .padding(.all)
                                     .background(Color.blue.opacity(0.5))
                                     .cornerRadius(5)
                                     .padding(.all)
                            .shadow(color: .gray, radius:flags[num] ? 0:4, x: flags[num] ? 0 : 5, y: flags[num] ? 0 : 5)
                            .offset(x: flags[num] ? 5 : 0,y: flags[num] ? 5 : 0)
                    }.alert(isPresented: $ShowAlertFlags[num]) {
                        switch(flags[num]) {
                            case false:
                                return Alert(title: Text("このボタンを押す"),
                                             primaryButton:.default(Text("いいえ")),
                                             secondaryButton: .default(Text("はい")){
                                                self.flags[num].toggle()
                                             })
                            case true:
                                return Alert(title: Text("戻す?"),
                                             primaryButton:.default(Text("いいえ")),
                                             secondaryButton: .default(Text("はい")){
                                                self.flags[num].toggle()
                                             })
                        }
                    }
               }
        }
    }
}

swiftui.gif

0
0
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
0
0