如何从我的UIView中仅删除用户添加的子视图

时间:2014-12-01 21:15:56

标签: ios swift uiview subviews

我试图删除我添加到视图中的所有子视图,因此我实现了一个循环来迭代子视图,其中包含以下内容:

for subview in view.subviews {
    println(subview)
    //subview.removeFromSuperview()
}

我通过在我的视图中添加UILabel来测试它,然后运行此代码。输出包含我的UILabel,但也包含_UILayoutGuide。所以,我的问题是如何确定子视图是我添加的还是系统添加的子视图?

4 个答案:

答案 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)

我这样解决问题.... 首先我添加了子视图

  • [self.view addSubview:genderPicker];

然后仅从视图中删除该子视图

  • [genderPicker removeFromSuperview];

答案 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()
        }
    }

}

}