【问题标题】:Grid of UIButtons using 2D Array使用 2D 数组的 UIButton 网格
【发布时间】:2020-10-09 15:45:34
【问题描述】:

作为一个小项目,我想制作我自己版本的this little game

为此,我需要一个 UIButton 网格,因此我考虑使用 2D 数组来解决此问题。 这就是我到目前为止所得到的:

    class ViewController: UIViewController {

    var btnArr: [[UIButton]] = [] // CREATE A 2D-ARRAY OF UIBUTTONS

    override func viewDidLoad() {
        super.viewDidLoad()
        buildBoard()
    }

    @objc func buttonAction(sender: UIButton!) {
        print("Button " + sender.title(for: .normal)! + " tapped")
    }
    
    func buildBoard(){
        let btnSize = 40
        var x = 1
        var xPos = 0
          while(x<10){
            var y = 5
            var yPos = 0
             while(y<14){
                  let button = UIButton(frame: CGRect(x: x*btnSize, y: y*btnSize, width: btnSize, height: btnSize))
                  button.layer.cornerRadius = 0.5 * button.bounds.size.width
                  button.clipsToBounds = true
                  button.backgroundColor = .lightGray
                  button.setTitle(String(xPos) + ", " + String(yPos), for: .normal)
                  button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
                  self.view.addSubview(button)
                  btnArr[xPos][yPos] = button  // ADD THE BUTTONS TO THE 2D-ARRAY
                  y+=1
                yPos+=1
              }
            xPos+=1
              x+=1
          }
    }
}

x 和 xPos 不是那么漂亮,但我想将网格居中并从 (0,0) 而不是 (1,5) 开始计数按钮。

我的问题:

我想将创建的按钮添加到我的数组“btnArr”,但它给了我一个线程 1:致命错误:索引超出范围。我发现了问题,因为我不能像这样将按钮添加到我的数组中,因为它是空的。但我不知道如何使这项工作......

是否可以使用此 2d-array-implementation 进行链接中所见的所需偏移量?

感谢您的帮助!!!

如果你想加入我的项目,请写信给我 :)

【问题讨论】:

  • 向数组添加元素时应该使用append。请在开始一个新项目时做一些基础研究,例如,您可以阅读有关数组 herehere 的信息。也许您还应该阅读循环,检查第一个链接

标签: swift xcode multidimensional-array uibutton


【解决方案1】:

您可以取而代之的是集合视图,并使您的二维数组与集合视图的单元格保持同步。

您可以在其中创建带有 UIButton 对象的集合视图的自定义单元格,为单元格中的每个按钮添加标签,并在按钮单击时添加目标选择器。

这将减少您的代码并提高其可维护性。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2019-09-28
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多