Xcode做一个5*5的格子

Xcode做一个格子,(用cell?),行列数根据不同提取数据变化,可暂定10*10。行列数多了可以滑动查看,每个格子可赋值字符。每个格子可点击,并处发一个事件。
希望用SwiftUI 和 Storyboard实现。步骤一定是我可以复现的,请实际用过xcode的大拿回答。谢谢!

以下是使用 SwiftUI 和 Storyboard 实现的步骤,创建一个包含可点击格子的简单界面:

步骤 1:创建新的 SwiftUI 项目

打开 Xcode,选择 "Create a new Xcode project",然后选择 "App" 模板,并选择 "SwiftUI" 作为界面类型。点击 "Next",为项目命名并选择保存位置,然后点击 "Create"。

步骤 2:创建 Grid 视图

在左侧的项目导航器中,找到 ContentView.swift 文件。这是默认的 SwiftUI 视图文件。在 ContentView 中,你可以创建一个包含格子的 Grid 视图,如下所示:

import SwiftUI

struct ContentView: View {
    let numRows = 10
    let numCols = 10
    
    var body: some View {
        VStack {
            ForEach(0..<numRows, id: \.self) { row in
                HStack {
                    ForEach(0..<numCols, id: \.self) { col in
                        GridCellView()
                    }
                }
            }
        }
    }
}

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

这个代码创建了一个包含 10x10 的格子网格,每个格子都使用 GridCellView 表示。

步骤 3:创建 GridCellView 视图

创建一个名为 GridCellView.swift 的新 SwiftUI 视图文件,用于表示每个格子。在 GridCellView 中,你可以添加一个文本视图来显示字符,并使其可点击,如下所示:

import SwiftUI

struct GridCellView: View {
    @State private var cellText = ""
    
    var body: some View {
        Button(action: {
            // 处理格子点击事件
            print("Cell Clicked!")
        }) {
            Text(cellText)
                .font(.headline)
                .frame(width: 40, height: 40)
                .background(Color.blue)
                .foregroundColor(.white)
        }
    }
}

struct GridCellView_Previews: PreviewProvider {
    static var previews: some View {
        GridCellView()
    }
}

这个代码创建了一个可点击的格子,当格子被点击时,会在控制台输出一条消息。

步骤 4:在 ContentView 中使用 GridCellView

回到 ContentView.swift 文件,修改 Grid 视图的内容,使其使用 GridCellView,如下所示:

var body: some View {
    VStack {
        ForEach(0..<numRows, id: \.self) { row in
            HStack {
                ForEach(0..<numCols, id: \.self) { col in
                    GridCellView()
                }
            }
        }
    }
}

现在,你的界面应该包含一个可点击的 10x10 格子网格,每个格子都有一个蓝色的背景,并且当点击格子时会在控制台输出一条消息。

步骤 5:在 Storyboard 中预览

你可以在 Xcode 的预览窗口中查看你的界面。选择 ContentView,然后点击右上角的 "Resume" 按钮,即可在预览窗口中看到你的格子网格界面。

这些步骤可以帮助你创建一个包含可点击格子的简单界面。你可以进一步自定义格子的外观和行为,根据你的需要进行修改。

题主,这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。


好的,以下是实现该功能的步骤:

  1. 在Storyboard中添加一个UICollectionView,并设置其大小和位置。
  2. 在Xcode中创建一个新的Swift文件,命名为“GridCell.swift”,用于定义每个格子的外观和行为。代码如下:
import SwiftUI

struct GridCell: View {
    var value: String

    var body: some View {
        Text(value)
            .frame(width: 40, height: 40)
            .background(Color.white)
            .border(Color.gray)
    }
}

该代码定义了每个格子的大小、背景色、边框等样式。

  1. 在Storyboard中设置UICollectionView的数据源和委托对象。可以将这些设置与视图控制器关联,如下所示:
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
    @IBOutlet weak var collectionView: UICollectionView!

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView.dataSource = self
        collectionView.delegate = self
    }

    // 实现UICollectionViewDataSource的方法
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 100
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "GridCell", for: indexPath) as! GridCellCollectionViewCell

        // 设置每个格子的值
        cell.configure(with: "A")

        return cell
    }

    // 实现UICollectionViewDelegate的方法
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        // 处理格子点击事件
    }
}

该代码定义了视图控制器作为UICollectionView的数据源和委托对象,并实现了必须的方法。其中,“GridCellCollectionViewCell”是一个自定义的UICollectionViewCell子类,用于包含每个格子的SwiftUI视图。

  1. 在Storyboard中创建一个新的UICollectionViewCell,命名为“GridCellCollectionViewCell”,并将其类设置为“GridCell”。这将告诉UICollectionView使用我们定义的SwiftUI视图作为格子的外观。

  2. 运行应用程序,您应该能够看到一个包含100个格子的网格,并且可以在每个格子上点击。在此基础上,可以根据需要根据不同的行列数提取数据进行更改,或者使网格可滚动以包含更多的格子。

参考gpt:
结合自己分析给你如下建议:
在Xcode中创建一个新的项目,选择iOS平台,选择Single View App模板,输入项目名称和组织标识符,选择SwiftUI作为用户界面。
在项目导航器中,选中ContentView.swift文件,打开画布,点击右上角的Resume按钮以启动预览。
在资源库中,找到Grid视图,并将其拖入画布或源代码中。Grid视图可以让您在行和列中排列子视图,并根据不同的设备和方向自动调整大小和间距。
在Grid视图的初始化器中,指定行和列的数量,以及行和列之间的间距。例如,如果您想要一个10*10的格子,可以写成Grid(rows: 10, columns: 10, spacing: 5)。
在Grid视图的闭包中,使用ForEach循环来遍历所有的格子,并为每个格子创建一个Text视图。Text视图可以显示任意的字符,并可以使用修饰符来调整字体、颜色、对齐等属性。例如,如果您想要显示格子的索引,可以写成Text(“(row * 10 + column)”)。
为了让格子可以点击,并触发一个事件,您可以使用Button视图来包装Text视图,并在Button视图的闭包中写入您想要执行的操作。例如,如果您想要在控制台打印出格子的索引,可以写成Button(action: { print(“(row * 10 + column)”) }) { Text(“(row * 10 + column)”) }。
为了让格子可以滑动查看,您可以使用ScrollView视图来包装Grid视图,并指定滑动方向。例如,如果您想要水平和垂直都可以滑动,可以写成ScrollView([.horizontal, .vertical]) { Grid(…) }。
以下是一个完整的示例代码:

Swift

import SwiftUI

struct ContentView: View {
    var body: some View {
        ScrollView([.horizontal, .vertical]) {
            Grid(rows: 10, columns: 10, spacing: 5) { row, column in
                Button(action: { print("\(row * 10 + column)") }) {
                    Text("\(row * 10 + column)")
                        .font(.system(size: 20))
                        .foregroundColor(.white)
                        .frame(width: 50, height: 50)
                        .background(Color.blue)
                        .cornerRadius(5)
                }
            }
        }
    }
}

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

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
当使用Xcode和SwiftUI来创建一个包含格子的界面时,可以按照以下步骤进行实现:

1、 打开Xcode并创建一个新的iOS项目。
2、 在项目创建时选择SwiftUI作为界面技术。
3、 在项目导航器中选择主文件(例如ContentView.swift)。
4、 在ContentView结构体中添加一个嵌套的格子视图Grid,用于显示格子。

struct ContentView: View {
    var body: some View {
        Grid()
    }
}

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

5、 创建一个名为Grid的新的SwiftUI View结构体,用于表示格子视图。

struct Grid: View {
    let rows = 5 // 行数
    let columns = 5 // 列数

    var body: some View {
        ScrollView {
            LazyVGrid(columns: createColumns(), spacing: 10) {
                ForEach(0..<rows * columns) { index in
                    CellView(index: index)
                }
            }
            .padding()
        }
    }

    // 创建列布局
    func createColumns() -> [GridItem] {
        var columns: [GridItem] = []
        for _ in 0..<self.columns {
            columns.append(GridItem(.flexible(), spacing: 10))
        }
        return columns
    }
}

6、 创建一个名为CellView的新的SwiftUI View结构体,用于表示每个格子。

struct CellView: View {
    let index: Int

    var body: some View {
        Button(action: {
            // 处理点击事件
            print("Cell \(index) tapped")
        }) {
            Text("Cell \(index)")
                .padding()
                .background(Color.gray)
                .cornerRadius(8)
                .foregroundColor(.white)
        }
    }
}

在上述代码中,我们使用了ScrollViewLazyVGrid来创建一个可以滚动的格子布局。LazyVGrid用于创建行和列,ForEach用于在每个格子位置创建一个CellView,并在其中添加一个点击事件处理。

您可以根据需要调整行数和列数,并为每个格子自定义样式。

这样,您就可以在Xcode中使用SwiftUI创建一个包含格子的界面。运行项目后,您将看到一个可滚动的格子布局,并且每个格子都可以点击并触发事件。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

引用 皆我百晓生 小程序回复内容作答:
在Xcode中使用SwiftUI实现一个可滑动查看的5x5格子的步骤如下:

  1. 打开Xcode,创建一个新的SwiftUI项目。
  2. 在ContentView.swift文件中,替换代码如下:
import SwiftUI

struct ContentView: View {
    let rows = 5
    let columns = 5
    
    var body: some View {
        VStack {
            ScrollView(.vertical) {
                VStack(spacing: 0) {
                    ForEach(0..<rows) { row in
                        HStack(spacing: 0) {
                            ForEach(0..<self.columns) { column in
                                CellView(row: row, column: column)
                            }
                        }
                    }
                }
            }
        }
    }
}

struct CellView: View {
    let row: Int
    let column: Int
    
    @State private var value: String = ""
    
    var body: some View {
        Button(action: {
            self.value = "\(self.row),\(self.column)" // 点击事件
        }) {
            Text(value)
                .frame(width: 50, height: 50)
                .border(Color.black)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
  1. 运行项目,会显示一个5x5的格子,每个格子初始显示为空白。你可以点击每个格子并触发点击事件,同时格子的值会显示为相应的行列位置。

这样就实现了一个使用SwiftUI创建的可滑动查看的5x5格子。请注意,我没有使用Storyboard,因为你提到要使用SwiftUI和Storyboard实现。如果你坚持要使用Storyboard,可以创建一个SwiftUI View Controller(参考 https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit)并将其添加到Storyboard中。

希望对你有所帮助!

【以下回答由 GPT 生成】

解决方案:

要在Xcode中使用SwiftUI和Storyboard实现一个可滑动查看的5*5格子,每个格子可以赋值字符并触发一个事件,可以按照以下步骤进行操作:

  1. 首先,创建一个新的Xcode项目,并选择使用SwiftUI和Storyboard模板。

  2. 在Main.storyboard中,将默认的ViewController删除,并拖拽一个新的ViewController到Storyboard中。

  3. 在ViewController中,添加一个UICollectionView,用于展示格子。

  4. 创建一个新的UICollectionViewCell的子类,用于自定义每个格子的外观和行为。可以在Swift文件中创建一个名为GridCell的类,并继承UICollectionViewCell。

  5. 在GridCell中,添加一个UILabel,用于显示字符。

  6. 在GridCell中,添加一个UITapGestureRecognizer,用于触发每个格子的事件。

  7. 在Main.storyboard中,将UICollectionView的DataSource和Delegate连接到ViewController。

  8. 在ViewController中,实现UICollectionView的DataSource和Delegate方法。

  9. 在ViewController的Swift文件中,添加一个数组来存储格子的数据。可以使用二维数组来表示5*5的格子。

  10. 在ViewController中,设置UICollectionView的DataSource和Delegate的方法,以便正确显示格子和响应触摸事件。可以根据格子的数据来配置每个格子的外观和行为。

下面是一个示例代码,用于实现上述步骤:

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var collectionView: UICollectionView!

    let gridSize = 5
    var gridData = [[String]]()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Generate grid data
        for _ in 0..<gridSize {
            var row = [String]()
            for _ in 0..<gridSize {
                row.append("")
            }
            gridData.append(row)
        }

        collectionView.dataSource = self
        collectionView.delegate = self

        // Register GridCell as the cell class for the UICollectionView
        collectionView.register(GridCell.self, forCellWithReuseIdentifier: "GridCell")
    }
}

extension ViewController: UICollectionViewDataSource, UICollectionViewDelegate {
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return gridData.count
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return gridData[section].count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "GridCell", for: indexPath) as! GridCell

        let value = gridData[indexPath.section][indexPath.row]
        cell.textLabel.text = value

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let selectedValue = gridData[indexPath.section][indexPath.row]
        print("Selected value: \(selectedValue)")
    }
}

class GridCell: UICollectionViewCell {
    let textLabel = UILabel()

    override init(frame: CGRect) {
        super.init(frame: frame)

        // Configure cell appearance
        layer.borderWidth = 1
        layer.borderColor = UIColor.black.cgColor

        // Configure label appearance
        textLabel.textAlignment = .center
        textLabel.frame = contentView.bounds
        contentView.addSubview(textLabel)

        // Configure UITapGestureRecognizer
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        addGestureRecognizer(tapGestureRecognizer)
    }

    @objc func handleTap(_ sender: UITapGestureRecognizer) {
        print("Cell tapped")
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

这样,你就可以在Xcode中使用SwiftUI和Storyboard实现一个可滑动查看的5*5格子,每个格子可以赋值字符并触发一个事件了。你可以根据需要来调整格子的行数和列数,以及自定义格子的外观和行为。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

结合GPT给出回答如下请题主参考
好的,以下是关于如何使用SwiftUI和Storyboard来创建一个5*5的格子:

  1. 创建一个新的Xcode项目,选择Single View App模板,使用SwiftUI界面技术。
  2. 在Storyboard中添加一个UICollectionView,并将其大小设置为适当的大小(例如:200x200)。
  3. 添加一个UICollectionViewCell作为格子的单元格,并在其中添加一个UILabel,用于显示文本。您可以将其大小设置为与集合视图格子的大小相同。
  4. 在UIViewController的类中,注册UICollectionViewCell类,并设置UICollectionViewDataSource和UICollectionViewDelegate代理。
  5. 在ViewController中添加一个变量以存储格子的数据,例如: var gridData = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
  6. 在UICollectionViewDataSource中实现numberOfItemsInSection和cellForItemAt方法,以根据行列数提取数据并初始化格子的内容。
  7. 在UICollectionViewDelegate中实现didSelectItemAt方法,以处理点击格子事件。
  8. 运行应用程序,您应该看到一个包含5*5格子的集合视图,每个格子显示一个字符。

以下是一些示例代码:

ViewController.swift

import UIKit
import SwiftUI

class ViewController: UIViewController {
    
    var gridData = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
    
    @IBOutlet weak var collectionView: UICollectionView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        collectionView.register(GridCell.self, forCellWithReuseIdentifier: "GridCell")
        collectionView.dataSource = self
        collectionView.delegate = self
    }
}

extension ViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 25 // 5*5格子
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "GridCell", for: indexPath) as! GridCell
        
        let index = indexPath.row
        
        // 根据不同的提取数据变化
        cell.label.text = gridData[index]
        
        return cell
    }
}

extension ViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("Selected grid at row \(indexPath.row / 5 + 1), column \(indexPath.row % 5 + 1)")
    }
}

struct ViewControllerWrapper: UIViewControllerRepresentable {
    typealias UIViewControllerType = ViewController

    func makeUIViewController(context: Context) -> ViewController {
        UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as! ViewController
    }

    func updateUIViewController(_ uiViewController: ViewController, context: Context) {
        // nothing to do here
    }
}

GridCell.swift

import UIKit

class GridCell: UICollectionViewCell {
    
    let label = UILabel()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        label.textAlignment = .center
        contentView.addSubview(label)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        label.frame = contentView.bounds
    }
}

Main.storyboard

在Main.storyboard中,将UICollectionView拖放到视图控制器中,将其大小设置为200x200,调整布局,添加UICollectionViewCell并添加一个UILabel。将UICollectionViewCell类设置为GridCell,并创建UICollectionViewDataSource和UICollectionViewDelegate的Outlets。


import SwiftUI
struct ContentView: View {
    let rows = 5
    let columns = 5
    var body: some View {
        VStack {
            ScrollView(.vertical) {
                VStack(spacing: 0) {
                    ForEach(0..<rows) { row in
                        HStack(spacing: 0) {
                            ForEach(0..<self.columns) { column in
                                CellView(row: row, column: column)
                            }
                        }
                    }
                }
            }
        }
    }
}
struct CellView: View {
    let row: Int
    let column: Int
    @State private var value: String = ""
    var body: some View {
        Button(action: {
            self.value = "\(self.row),\(self.column)" // 点击事件
        }) {
            Text(value)
                .frame(width: 50, height: 50)
                .border(Color.black)
        }
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

试试以下的,创建可滑动格子视图的基本示例。这个例子中的格子是固定的 10*10,但你可以根据需要调整这些值。每个格子都可以被点击,并触发一个事件。

import SwiftUI  
  
struct GridView: View {  
    var body: some View {  
        ScrollView {  
            VStack(alignment: .leading) {  
                ForEach(0..<100, id: \.self) { row in  
                    HStack {  
                        ForEach(0..<10, id: \.self) { column in  
                            Cell(row: row, column: column)  
                        }  
                    }  
                }  
            }  
        }  
    }  
}

然后,创建 Cell 视图。这个视图包含一个 Text 元素,可以根据你的需要更改。当这个视图被点击时,触发一个事件

struct Cell: View {  
    var row: Int  
    var column: Int  
    var onTap: () -> Void  
      
    var body: some View {  
        Button(action: {  
            self.onTap()  
        }) {  
            Text("Cell \(row), \(column)")  
        }  
        .padding()  
    }  
}

最后,可以将这个视图添加到你的 Storyboard如果你想在 Storyboard 中使用 SwiftUI 视图,你需要在你的 SceneDelegate 中添加以下代码
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {  
    if let windowScene = scene as? UIWindowScene {  
        let viewController = UIHostingController(rootView: GridView())  
          
        self.window = UIWindow(windowScene: windowScene)  
        self.window?.rootViewController = viewController  
        self.window?.makeKeyAndVisible()  
    }  
}

援引讯飞星火:
首先,我们需要创建一个SwiftUI视图,使用LazyVGrid布局来创建一个10*10的格子。然后,我们可以为每个格子添加一个可点击的事件。以下是实现这个功能的步骤:

  1. 打开Xcode,创建一个新的iOS项目,选择"Single View App"模板。
  2. 在项目中创建一个新的SwiftUI文件,命名为GridView.swift
  3. GridView.swift文件中,编写以下代码:
import SwiftUI

struct GridItem: Identifiable {
    let id = UUID()
    var content: String
}

struct GridView: View {
    @State private var items: [GridItem] = Array(repeating: GridItem(content: ""), count: 10)

    var body: some View {
        ScrollView {
            LazyVGrid(columns: Array(repeating: GridItem.Cell.self, count: 10), spacing: 10) {
                ForEach(items) { item in
                    item.content
                        .frame(width: 100, height: 100)
                        .background(Color.gray.opacity(0.5))
                        .cornerRadius(10)
                }
            }
            .padding()
        }
    }
}

struct GridItem_Previews: PreviewProvider {
    static var previews: some View {
        GridView()
    }
}
  1. GridView.swift文件中,我们定义了一个GridItem结构体,用于表示每个格子的数据。我们还定义了一个GridView视图,它包含一个ScrollView,用于显示滚动视图。在滚动视图中,我们使用LazyVGrid布局来创建一个10*10的格子。
  2. LazyVGrid布局中,我们使用ForEach循环遍历items数组,并为每个格子设置内容和样式。我们将每个格子的内容放在一个Frame中,并设置其宽度、高度、背景颜色和圆角半径。
  3. 运行项目,你应该可以看到一个10*10的格子,每个格子的内容都是""。你可以根据需要修改GridItem数组中的数据,以填充不同的字符。
  4. 为了实现点击事件,我们需要在GridItem结构体中添加一个onTapGesture属性。修改GridItem结构体如下:
struct GridItem: Identifiable {
    let id = UUID()
    var content: String
    var onTapGesture: () -> Void
}
  1. GridView视图中,我们使用ForEach循环遍历items数组,并为每个格子设置内容、样式和点击事件。将onTapGesture属性设置为一个闭包,该闭包将在点击格子时执行。修改ForEach循环中的代码如下:
ForEach(items) { item in
    item.content
        .frame(width: 100, height: 100)
        .background(Color.gray.opacity(0.5))
        .cornerRadius(10)
        .onTapGesture {
            print("Grid item tapped")
        }
}

现在,当你点击一个格子时,控制台将输出"Grid item tapped"。你可以根据需要修改点击事件的实现。

在 ContentView.swift 文件中,定义一个 GridView 结构体,该结构体表示我们的格子视图。

struct GridView: View {
    let rows: Int
    let columns: Int
    let gridData: [[String]] // 这里使用一个字符串数组来表示每个格子的数据

    var body: some View {
        ScrollView {
            VStack(spacing: 0) {
                ForEach(0..<rows, id: \.self) { row in
                    HStack(spacing: 0) {
                        ForEach(0..<columns, id: \.self) { column in
                            GridCell(data: gridData[row][column])
                                .onTapGesture {
                                    // 在这里处理格子点击事件
                                    print("Grid cell at (\(row), \(column)) was tapped")
                                }
                        }
                    }
                }
            }
        }
    }
}


创建一个 GridCell 结构体,表示每个单独的格子。这里我们可以使用 Text 来显示字符。

struct GridCell: View {
    let data: String

    var body: some View {
        Text(data)
            .frame(width: 40, height: 40) // 根据需要设置格子的大小
            .border(Color.black) // 可以添加边框以区分格子
    }
}


在 ContentView.swift 文件中的 ContentView 结构体中,使用 GridView 并传递所需的行数、列数和数据来创建格子视图。

struct ContentView: View {
    let rows = 10
    let columns = 10

    var body: some View {
        GridView(rows: rows, columns: columns, gridData: createGridData())
    }
    
    // 创建示例数据的函数
    func createGridData() -> [[String]] {
        var data: [[String]] = []
        for _ in 0..<rows {
            var row: [String] = []
            for _ in 0..<columns {
                // 这里可以设置每个格子的初始数据
                row.append("A") // 例如,初始数据为字符 "A"
            }
            data.append(row)
        }
        return data
    }
}


https://stackoverflow.com/questions/56529488/is-there-any-way-to-use-storyboard-and-swiftui-in-same-ios-xcode-project