如何阻止我的所有 SWIFTUI 按钮一起切换?

Posted

技术标签:

【中文标题】如何阻止我的所有 SWIFTUI 按钮一起切换?【英文标题】:How can I stop all my SWIFTUI buttons toggling together? 【发布时间】:2019-08-07 21:27:40 【问题描述】:

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

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)
  

【问题讨论】:

【参考方案1】:

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

例如可以这样做:

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

【讨论】:

以上是关于如何阻止我的所有 SWIFTUI 按钮一起切换?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:你可以将 AppStorage 与解码的 json 一起使用吗?

如何在 SwiftUI 中动态隐藏导航返回按钮

SwiftUI - 如何切换核心数据中的所有布尔值

SwiftUI:从列表中的项目获取切换状态

如何阻止 SwiftUI 重新加载我通过 UIViewRepresentable 使用的 WKWebView 页面?

添加 ViewModel 后,SwiftUI 视图未在按钮切换上更新