我试图删除我添加到视图中的所有子视图,因此我实现了一个循环来迭代子视图,其中包含以下内容:
for subview in view.subviews {
println(subview)
//subview.removeFromSuperview()
}
我通过在我的视图中添加UILabel来测试它,然后运行此代码。输出包含我的UILabel,但也包含_UILayoutGuide。所以,我的问题是如何确定子视图是我添加的还是系统添加的子视图?
答案 0 :(得分:13)
如果您只想阻止循环删除_UILayoutGuide
(类UILayoutSupport
),请尝试以下操作:
for subview in self.view.subviews {
if !(subview is UILayoutSupport) {
print(subview)
subview.removeFromSuperview()
}
}
一般来说,如果您想阻止删除_UILayoutGuide
以外的其他观看次数,并且您知道要从UIView中删除的特定类型的子视图,则可以限制子视图你移除到那些类型,例如:
for subview in view.subviews {
if subview is ULabel {
println(subview)
subview.removeFromSuperview()
}
}
答案 1 :(得分:10)
一个选项是为您添加特定标记的所有视图。然后只有删除它们才会删除它们。
userCreatedView.tag = 100;
...
for subview in view.subviews {
if (subview.tag == 100) {
subview.removeFromSuperview()
}
}
您还可以保留用户添加的所有子视图的数组,然后检查该子视图是否在您的userAddedViewsArray中
或者您可以为用户添加的视图创建UIView的子类,然后只删除该类的子视图
答案 2 :(得分:1)
我这样解决问题.... 首先我添加了子视图
然后仅从视图中删除该子视图
答案 3 :(得分:0)
指示灯按字符串输入乐趣关闭 swift 2.2及以上
func activityonoff(viewcontroler:UIViewController,string:String){
let container: UIView = UIView()
let loadingView: UIView = UIView()
if string == "on"{
container.frame = viewcontroler.view.frame
container.center = viewcontroler.view.center
container.backgroundColor = UIColor.whiteColor()
container.alpha = 1
container.tag = 1
loadingView.frame = CGRectMake(0, 0, 80, 80)
loadingView.center = container.center
loadingView.backgroundColor = UIColor(red: 4/255, green: 68/255, blue: 68/255, alpha: 0.7)
loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 10
let actInd: UIActivityIndicatorView = UIActivityIndicatorView()
actInd.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
actInd.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge
actInd.center = CGPointMake(loadingView.frame.size.width / 2,loadingView.frame.size.height / 2);
loadingView.addSubview(actInd)
container.addSubview(loadingView)
viewcontroler.view.addSubview(container)
actInd.startAnimating()
}
else{
for v in viewcontroler.view.subviews{
if v.tag == 1{
v.removeFromSuperview()
}
}
}
}