gpt4 book ai didi

ios - 数组中的 UILabels 未显示在 ViewController 上

转载 作者:行者123 更新时间:2023-11-30 13:05:27 25 4
gpt4 key购买 nike

所以我试图在我的应用程序中显示一个网格/表格,为此我创建了一个 UILabels 数组:

var rows = 2
var columns = 2

var grid = [[UILabel]](count: rows, repeatedValue: [UILabel](count: columns, repeatedValue: UILabel()))

然后我创建了每个 UILabel:

for i in 0 ..< grid.count
{
for j in 0 ..< grid[0].count
{
grid[i][j].frame = CGRectMake(x + CGFloat(j*Int(gridSpace)), y + CGFloat(i*Int(gridSpace)), gridSpace, gridSpace)
grid[i][j].backgroundColor = UIColor.redColor()
grid[i][j].hidden = false

grid[i][j].textColor = UIColor.whiteColor()
grid[i][j].textAlignment = NSTextAlignment.Center
grid[i][j].text = "label: [\(i)][\(j)]"

self.view.addSubview(grid[i][j])

print("grid[\(i)][\(j)]X = \(grid[i][j].frame.origin.x) grid[\(i)][\(j)]Y = \(grid[i][j].frame.origin.y)")
}
}

发生的事情实际上非常有趣。代码编译并完成所有操作,但只显示一个标签。标签的尺寸和所有内容都很完美,但只显示其中之一。

显示的标签始终是 grid[rows-1][columns-1] 标签。但是,当我打印应该位于网格数组中的其余标签的 x 和 y 坐标时,所有坐标都恰好位于它们应该位于 View Controller 上的位置,只是标签没有显示。当我将 for 循环更改为

for i in 0 ..< grid.count-1
{
for j in 0 ..< grid[0].count-1
{

仍然只显示最后一个标签(grid[rows-1][columns-1]标签),但坐标正好在它们应该在的位置。另一个奇怪的事情是,如果我改变线路

grid[i][j].text = "test label: [\(i)][\(j)]"

if(j != grid[0].count-1)
{
grid[i][j].text = "test label: [\(i)][\(j)]"
}

然后显示的标签仍然具有网格[rows-1][columns-1]的坐标,但具有网格[rows-1][columns-2]的标签文本

任何人都可以帮我解决我的问题或解释发生了什么吗?

最佳答案

这是因为您使用重复值初始化网格的方式。如果重复值是引用类型,则数组实际上只会创建一项,并将所有索引都指向该项,因此在 for 循环中,您将更改唯一一个 UILabel 的框架一遍又一遍。这就是为什么您只能在屏幕上看到最后一个。

要创建您想要的数组,请替换以下内容:

var grid = [[UILabel]](count: rows, repeatedValue: [UILabel](count: columns, repeatedValue: UILabel()))

var grid = [[UILabel]]()
for row in 0..<rows {
grid.append([UILabel]())
for column in 0..<columns{
grid[row].append(UILabel())
}
}

var grid = [[UILabel]]((0..<rows).map { _ in
[UILabel]((0..<columns).map { _ in
UILabel()
})
})

关于ios - 数组中的 UILabels 未显示在 ViewController 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39433011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com