Swift addsubview并将其删除


81

我想添加子视图并一键删除。这是我的代码:

/ *添加子视图* /

var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568))
testView.backgroundColor = UIColor.blueColor()
testView.alpha = 0.5
testView.tag = 100
super.view.userInteractionEnabled = false
self.view.userInteractionEnabled = true
self.view.addSubview(testView)

/ *删除子视图* /

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    let touch = touches.anyObject() as UITouch
    let point = touch.locationInView(self.view)

    if(testView.tag==100){
        println("Tag 100")
        testView.removeFromSuperview()
    }
    else{
        println("tag not found")
    }

}

但是删除它不起作用有人可以帮助我吗?谢谢!


“无效”是什么意思?增加?去除?错误吗?请编辑您的问题以包括更多信息。
ABMagil

1
testView是带有标签100的视图,而不是self.view,因此您的if语句永远不会执行。
rdelmar

感谢您的回答。现在进行编辑
Dasoga

Answers:


99

感谢帮助。这是解决方案:我创建了子视图,并添加了将其删除的手势

@IBAction func infoView(sender: UIButton) {
    var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568))
    testView.backgroundColor = UIColor.blueColor()
    testView.alpha = 0.5
    testView.tag = 100
    testView.userInteractionEnabled = true
    self.view.addSubview(testView)

    let aSelector : Selector = "removeSubview"
    let tapGesture = UITapGestureRecognizer(target:self, action: aSelector)
    testView.addGestureRecognizer(tapGesture)
}

func removeSubview(){
    println("Start remove sibview")
    if let viewWithTag = self.view.viewWithTag(100) {
        viewWithTag.removeFromSuperview()
    }else{
        println("No!")
    }
}

更新:

迅捷3+

@IBAction func infoView(sender: UIButton) {
    let testView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568))
    testView.backgroundColor = .blue
    testView.alpha = 0.5
    testView.tag = 100
    testView.isUserInteractionEnabled = true
    self.view.addSubview(testView)

    let aSelector : Selector = #selector(GasMapViewController.removeSubview)
    let tapGesture = UITapGestureRecognizer(target:self, action: aSelector)
    testView.addGestureRecognizer(tapGesture)
}

func removeSubview(){
    print("Start remove sibview")
    if let viewWithTag = self.view.viewWithTag(100) {
        viewWithTag.removeFromSuperview()
    }else{
        print("No!")
    }
}

73

您必须使用该viewWithTag函数查找具有给定的视图tag

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    let touch = touches.anyObject() as UITouch
    let point = touch.locationInView(self.view)

    if let viewWithTag = self.view.viewWithTag(100) {
        print("Tag 100")
        viewWithTag.removeFromSuperview()
    } else {
        print("tag not found")
    }
}

谢谢!实际上,这解决了我的问题。但是与de super view的交互不会禁用。如何禁用与超级视图的交互?
Dasoga

我不明白 与superview有什么互动?
rakeshbs 2015年

我在第一个视图中有一个轻击手势,单击一个按钮后我添加了一个子视图,但这只是一个信息视图,因此,单击ai要删除它。现在它正在工作拆卸水龙头。但是在第一个视图中,我收到了相同的点击,我需要禁用该点击...谢谢!
Dasoga

您想在哪里点击以删除信息视图?当信息视图位于内部而不是外部时,是否要删除视图?
rakeshbs

是的,当用户点击信息视图(第二视图)时,我想删除该视图(第二视图)并再次显示第一视图。
Dasoga

2

假设您可以通过销售点或编程代码访问它,则可以通过引用您的视图fooremoveFromSuperview方法将其删除

foo.removeFromSuperview()

0

我在自定义CollectionViewCell中有一个视图,并在该视图上嵌入了一个图形。为了刷新它,我必须检查该视图上是否已经放置了图形,将其删除,然后应用新图形。这是解决方案

cell.cellView.addSubview(graph)
graph.tag = 10

现在,在您要删除它的代码块中(在您的情况下,gestureRecognizerFunction)

if let removable = cell.cellView.viewWithTag(10){
   removable.removeFromSuperview()
}

再次嵌入

cell.cellView.addSubview(graph)
graph.tag = 10

-9

使用XCode 8和Swift 3测试了此代码

要将自定义视图添加到SuperView,请使用:

self.view.addSubview(myView)

要从Superview中删除自定义视图,请使用:

self.view.willRemoveSubview(myView)


8
willRemoveSubview不会从超级视图中删除子视图。它仅告诉您何时要删除子视图。
Murat Yasar

3
要从超级视图中删除自定义视图,应使用myView.removeFromSuperview()
Yaroslav Bai

1
willRemoveSubview不会从超级视图中删除子视图。
Imtee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.