我目前有一个double for-loop,用于创建一个由UIView CGRect方格的X网格。该循环还将网格的每个UIView/Square添加到二维数组,允许我访问网格的每个单元格,并通过循环的索引值更改颜色/定位。Swift 3 - 如何从Superview中删除所有子视图以及数组
该循环似乎工作正常,并完美地显示单元格/正方形,但是过了一段时间,我想要删除所有的正方形,并且还清空数组(但不是完全删除),为新的下一个网格留出空间其大小可能不同)。我创建了一个从超级视图中删除所有视图的函数。
这是我正在创建的每个网格的“小区”,并且每个放置到2D阵列:
let xStart = Int(size.width/2/2) - ((gridSizeX * gridScale)/2)
let yStart = Int(size.height/2/2) - ((gridSizeY * gridScale)/2)
let cell : UIView!
cell = UIView(frame: CGRect(x: xStart + (xPos * gridScale), y:yStart + (yPos * gridScale), width:gridScale, height:gridScale))
cell.layer.borderWidth = 1
cell.layer.borderColor = UIColor(red:0.00, green:0.00, blue:0.00, alpha:0.02).cgColor
cell.backgroundColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:0)
cell.tag = 100
self.view?.addSubview(cell)
gridArray[xPos][yPos] = cell
正在应用程序负载创建的2D阵列,像这样:
gridArray = Array(repeating: Array(repeating: nil, count: gridSizeY), count: gridSizeX)
我试图寻找一种解决方案从superview中删除UIViews,但其他问题的所有答案似乎都不适用于我。我尝试添加cell.tag = 100
每个的UIView,然后删除所有UIViews与100类似的标记值:
for subview in (self.view?.subviews)! {
if (subview.tag == 100) {
subview.removeFromSuperview()
}
}
但是没有运气。我也试图用这个方法:
self.view?.subviews.forEach({
$0.removeConstraints($0.constraints)
$0.removeFromSuperview()
})
的主要区别我的代码中发现相对于其他民族的答案是,我有“?”和“!”在代码中的地方。我研究了它们的含义并理解了它的大部分内容,但是我仍然不知道如何修复我的代码,因为如果这样做,并且觉得这是问题所在。我所知道的是,试图从超级视图中移除UIViews不起作用,没有“?”和“!”代码根本不运行。
为什么你不创建一个_view_包含所有视图作为你打算删除的子视图......?那么当你需要删除这些视图时,你只需要删除他们的超级视图(或者只是隐藏它) - 这对我来说似乎是一种更简单的方法来处理这种情况,它也不会破坏约束条件 - 如果我找到了你正确。 – holex
这确实像一个更好的解决方案。你能解释一下我会怎么做吗? – Terminal