繁体   English   中英

如何停止所有SWIFTUI按钮一起切换?

[英]How can I stop all my SWIFTUI buttons toggling together?

我想创建一个方形按钮网格,可以单击/点击以在黑色和白色之间切换。 作为中点,我正在创建执行此操作的按钮行-请参见下面的代码。 但是,当我单击其中之一时,所有按钮都会一起切换。 我看不到这是为什么,因为每个单元都有一个状态变量?

struct ContentView: View {
  var body: some View {
    ZStack {
      Color.green
        .edgesIgnoringSafeArea(.all)
      RowOfCellsView(string: "X.X.X.X")
    }
  }
}

struct Cell: Identifiable {
  var id: Int
  var state: Bool
}

struct RowOfCellsView: View {
  var string: String
  var cells: [Cell] {
    string.map { Cell(id: 1, state: $0 == ".") }
  }

  var body: some View {
    HStack {
      ForEach(cells) { cell in
        CellView(isBlack: cell.state, symbol: "Q")
      }
    }
  }
}

struct CellView: View {
  @State var isBlack: Bool
  @State var symbol: String

  var body: some View {
    Button(action: { self.isBlack.toggle() }) {
      Text("")
        .font(.largeTitle)
        .frame(width: 40, height: 40)
        .aspectRatio(1, contentMode: .fill)
    }
    .background(isBlack ? Color.black : Color.white)
  }
}

啊哈-刚注意到我将所有单元格的ID设置为1-这就是问题所在! 因此需要有一种方法为每个Cell设置不同的ID。

例如可以:

string.enumerated().map { Cell(id: $0.0, state: $0.1 == ".") }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM