LoginSignup
_mitty
@_mitty

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SwiftUIでForEach構文を用いて並べたビューを、タップジェスチャーに個別に反応するようにする方法について

解決したいこと

SwiftUIでForEach構文を用いて並べたビューを、タップしたら、タップされたビューだけが色が変わるように動かしたかったため、まずは以下のテストコードを作成しました。

質問ですが、
このテストコードで、とりあえずは期待する結果を得られたのですが、ビューの数が以下コードのように3つだけでなくもっと多いとき(テストコードは1行3列ですが、20行30列の場合など)でも、同じような実装方法で良いでしょうか。

私のやり方のままでは、ビューの数と同じ数だけ@State変数を用意しなければならず、もっと良いやり方があるように思えてならないため、質問させていただきました。

何かお気づきの方、ご指摘よろしくお願いいたします

該当するソースコード

//Xcodeのバージョン Version 12.3 (12C33)
//Swiftのバージョン Apple Swift version 5.3.2


import SwiftUI

struct ContentView: View {

    @State var tapped = [false, false, false]

    var body: some View {
        HStack(spacing: 20) {
            ForEach(0 ..< 3){ i in
                Text("\(i)")
                    .frame(width: 50, height: 50)
                    .font(.custom("default", size: 30))
                    .background(self.tapped[i] ? Color.blue : Color.red)
                    .onTapGesture {
                        tapped[i].toggle()
                    }
            }
        }
    }
}

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

No Answers yet.

Your answer might help someone💌