Swift: 从子视图中删除所有
Swift: Remove All from the Subview
我创建了多个同名对象并将它们添加到子视图中(变量是德语)。
wandX = (screenBreite - ((felderAnzX - 0) * feldBreite))
wandY = ( screenHoehe - ((felderAnzY - 5) * feldBreite))
for(var i = 0; i < 6; i++){
wand1 = UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite))
wand1.image = wand
self.addSubview(wand1)
wandXarray.insert(wandX, atIndex: i)
wandYarray.insert(wandY, atIndex: i)
wandX = wandX + feldBreite
}
(创建一排墙)
但是如果我想用 wand1.removeFromSuperview()
删除它们,它只会删除它添加的最后一个对象。我找到的一个可能的解决方案是将另一个对象放在最上面并删除所有引用。对于许多对象和许多阶段,问题是 CPU 用法。
编辑:使用方法 self.view.subviews.removeAll()
出现以下错误:
Cannot use mutating member on immutable value: 'subviews' is a get-only property
wand1 = UIImageView(... 一遍又一遍地重写您的引用,因此除了从超级视图创建的最后一项之外,您将永远无法删除任何内容。您将不得不使用数组或字典:
class Class
{
var array = [UIImageView]();
...
func something()
{
...
for(var i = 0; i < 6; i++){
let wand1 = UIImageView();
wand1.image = wand
array.append(UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite)))
self.add.Subview(wand1)//Dunno how this works but it is your code
wandXarray.insert(wandX, atIndex: i)
wandYarray.insert(wandY, atIndex: i)
wandX = wandX + feldBreite
}
...
func removeThisImage(index : Int)
{
array[index].removeFromSuperView();
}
或者您可以为您创建的每个图像创建对象引用,每个图像都有一个唯一的名称
//不再允许
如果您只想从视图中删除所有子视图而不关心删除细节,只需调用 self.subviews.removeAll()
,其中 self 是包含您的子视图的视图。
//
看来您必须编写自己的扩展方法来处理此问题:
extension UIView
{
func clearSubviews()
{
for subview in self.subviews as! [UIView] {
subview.removeFromSuperview();
}
}
}
那么要使用它,就是self.view.clearSubviews();
我创建了多个同名对象并将它们添加到子视图中(变量是德语)。
wandX = (screenBreite - ((felderAnzX - 0) * feldBreite))
wandY = ( screenHoehe - ((felderAnzY - 5) * feldBreite))
for(var i = 0; i < 6; i++){
wand1 = UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite))
wand1.image = wand
self.addSubview(wand1)
wandXarray.insert(wandX, atIndex: i)
wandYarray.insert(wandY, atIndex: i)
wandX = wandX + feldBreite
}
(创建一排墙)
但是如果我想用 wand1.removeFromSuperview()
删除它们,它只会删除它添加的最后一个对象。我找到的一个可能的解决方案是将另一个对象放在最上面并删除所有引用。对于许多对象和许多阶段,问题是 CPU 用法。
编辑:使用方法 self.view.subviews.removeAll()
出现以下错误:
Cannot use mutating member on immutable value: 'subviews' is a get-only property
wand1 = UIImageView(... 一遍又一遍地重写您的引用,因此除了从超级视图创建的最后一项之外,您将永远无法删除任何内容。您将不得不使用数组或字典:
class Class
{
var array = [UIImageView]();
...
func something()
{
...
for(var i = 0; i < 6; i++){
let wand1 = UIImageView();
wand1.image = wand
array.append(UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite)))
self.add.Subview(wand1)//Dunno how this works but it is your code
wandXarray.insert(wandX, atIndex: i)
wandYarray.insert(wandY, atIndex: i)
wandX = wandX + feldBreite
}
...
func removeThisImage(index : Int)
{
array[index].removeFromSuperView();
}
或者您可以为您创建的每个图像创建对象引用,每个图像都有一个唯一的名称
//不再允许
如果您只想从视图中删除所有子视图而不关心删除细节,只需调用 self.subviews.removeAll()
,其中 self 是包含您的子视图的视图。
//
看来您必须编写自己的扩展方法来处理此问题:
extension UIView
{
func clearSubviews()
{
for subview in self.subviews as! [UIView] {
subview.removeFromSuperview();
}
}
}
那么要使用它,就是self.view.clearSubviews();