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

标签 swift button swiftui

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

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 == ".") }

关于swift - 如何停止所有 SWIFTUI 按钮一起切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57402494/

相关文章:

swift - 更改订单新的表格 View 项目进来

javascript - 如何使用javascript同时触发回车键和按钮

javascript - 如何像按钮表单输入一样动态排列 html 元素

python - 返回菜单按钮 TKinter

ios - 错误 : Argument type 'Date?' does not conform to expected type 'ReferenceConvertible'

swift - 有没有办法将 NSToolbarButton 与 MainViewController 连接起来?

json - 如何修复“不获取数据”错误?在 swift 和 Laravel api 中

objective-c - 如何在两个 CATransform3D 之间手动插值?

swift - 如何刷新弹出窗口

ios - SwiftUI Split View大标题不适用于 iPad