【问题标题】:Swift addsubview and remove itSwift addsubview 并删除它
【发布时间】:2015-03-27 15:18:31
【问题描述】:

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

/* 添加子视图 */

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")
    }

}

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

【问题讨论】:

  • “不工作”是什么意思?加法?去除?错误?请编辑您的问题以包含更多信息。
  • testView 是标签为 100 的视图,而不是 self.view,因此您的 if 语句永远不会执行。
  • 感谢您的回答。现在正在编辑

标签: ios swift uiview


【解决方案1】:

感谢您的帮助。这是解决方案: 我创建了子视图并添加了一个手势来删除它

@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!")
    }
}

更新:

Swift 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!")
    }
}

【讨论】:

    【解决方案2】:

    您必须使用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")
        }
    }
    

    【讨论】:

    • 谢谢!实际上这解决了我的问题。但是与超级视图的交互不会禁用。如何禁用与超级视图的交互?
    • 我不明白。和superview有什么互动?
    • 我在第一个视图中有一个点击手势,之后我用一个按钮添加了一个子视图,但它只是一个信息视图,所以,点击一个我想删除它。现在它正在使用删除水龙头。但是在第一个视图中,我收到了相同的点击,我需要禁用该点击...谢谢!
    • 您要点击哪里来移除信息视图?当信息视图被点击内部而不是外部时,您是否要删除该视图?
    • 是的,当用户点击信息视图(第二个视图)时,我想删除该视图(第二个视图)并再次显示 first 视图。
    【解决方案3】:

    假设您可以通过 outlet 或程序代码访问它,您可以通过引用您的视图 fooremoveFromSuperview 方法来删​​除它

    foo.removeFromSuperview()
    

    【讨论】:

      【解决方案4】:

      我的自定义 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
      

      【讨论】:

        【解决方案5】:

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

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

        self.view.addSubview(myView)

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

        self.view.willRemoveSubview(myView)

        【讨论】:

        • willRemoveSubview 不会从父视图中删除子视图。它只告诉子视图何时将被删除。
        • 要从超级视图中删除自定义视图,应该使用 myView.removeFromSuperview()
        • willRemoveSubview 不会从父视图中删除子视图。
        猜你喜欢
        • 2012-01-17
        • 2023-04-05
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        相关资源
        最近更新 更多