使用2D阵列的UI按钮网格



作为一个小项目,我想制作这个小游戏的自己版本。

我需要一个UI按钮网格,所以我考虑使用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数组实现,是否可以实现链接中所需的偏移?

谢谢你的帮助!!!

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

您可以采用集合视图,并使2D数组与集合视图的单元格保持同步。

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

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

最新更新