前回は、ボタンを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()
})
}
}
}
}
}
}