IOS Swift3如何随机删除自定义UIView

Posted

技术标签:

【中文标题】IOS Swift3如何随机删除自定义UIView【英文标题】:IOS Swift3 how to Remove Custom UIView randomly 【发布时间】:2017-05-26 05:18:06 【问题描述】:

我正在 swift 3 中构建一个 ios 应用程序,我正在创建动态 UIViews。我需要随机删除自定义视图。请帮助我,我被这个问题困扰了很长时间。 提前致谢

class ViewController: UIViewController  

    var myView: subView! 
    var y : CGFloat! 
    @IBOutlet weak var addButton: UIButton!

    override func viewDidLoad() 
        y = 1
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    

    func cancelbutton(_ sender: UIButton) 
        myView.removeFromSuperview()
    

    @IBAction func buttonAction(_ sender: Any) 
        y = y + 110
        myView = subView(frame: CGRect(x: 80, y: y, width: 300, height: 100))

        myView.backgroundColor = UIColor.green
        myView.actionButton.addTarget(self, action: (#selector(cancelbutton(_:))), for: UIControlEvents.touchUpInside)
        self.view.addSubview(myView)
    

正如您在上图中看到的那样,当我单击关闭时,SubView(custome View) 会关闭,但是带有绿色的 MyView 不会消失并停留在那里。有人请帮忙.........

required init?(coder aDecoder: NSCoder)
   
       super.init(coder: aDecoder)
       Bundle.main.loadNibNamed("subView",owner: self, options:nil)
       self.addSubview(self.views)
       Bundle.main.loadNibNamed("subView",owner: self, options:nil)
       self.addSubview(self.views)

   
   override init(frame: CGRect)
   
       super.init(frame: frame)
       Bundle.main.loadNibNamed("subView", owner: self, options: nil)
       views.frame = bounds
       self.addSubview(self.views)
   

   @IBAction func buttonAction(_ sender: Any) 
       views.removeFromSuperview()

   

【问题讨论】:

您在 subView 类中添加了什么代码? 您正在持有 myView = 您添加的最后一个视图。不是您要关闭/删除的视图。 需要初始化?(coder aDecoder: NSCoder) super.init(coder: aDecoder) Bundle.main.loadNibNamed("subView",owner: self, options:nil) self.addSubview(self.视图) Bundle.main.loadNibNamed("subView",owner: self, options:nil) self.addSubview(self.views) override init(frame: CGRect) super.init(frame: frame) Bundle.main.loadNibNamed ("subView", owner: self, options: nil) views.frame = bounds self.addSubview(self.views) 请在问题中附加代码(通过编辑),而不是在 cmets 中添加太多代码(因为缺少格式,它变得不可读) 嘿,只是想想你为什么不使用 tableview 来代替...... 【参考方案1】:

您做错的事情是您添加了子视图的多个视图,而您选择的原因并未删除。请修改您的代码,如下所示。 我所做的是,每当您添加新的subView 时,您还将设置其标记值,当您选择视图以删除其标记值并在该标记值上放置if 语句。

class ViewController: UIViewController  
    var myView: subView! 
    var y : CGFloat! 
    var tag : Int = 0 
    @IBOutlet weak var addButton: UIButton!

    override func viewDidLoad() 
        y = 1
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    
    func cancelbutton(_ sender: UIButton)
    
                let selectViewTagValue : Int = sender.tag /// save the selected view tag value
                for object in self.view.subviews 

                if ((object is subView) && object.tag == selectViewTagValue)
                
                    object.removeFromSuperview()
                
            
    
    @IBAction func buttonAction(_ sender: Any) 
        y = y + 110
        myView = subView(frame: CGRect(x: 80, y: y, width: 300, height: 100))
        myView.tag = tag 
        myView.actionButton.tag = tag
        tag = tag + 1
        myView.backgroundColor = UIColor.green
        myView.actionButton.addTarget(self, action: (#selector(cancelbutton(_:))), for: UIControlEvents.touchUpInside)
        self.view.addSubview(myView)

    

【讨论】:

可以直接在myView.actionButton上加标签 是的,我添加了它。谢谢。 if ((object is subView) && subView.tag == selectViewTagValue) object.removeFromSuperview() subView.tag ...我如何在这里设置标签,这是正确的吗?出错 请再次检查我的代码,我犯了一个小错误。以及您现在面临的错误类型。 请像这样更新你的条件 if ((object is subView) && object.tag == selectViewTagValue)object.removeFromSuperview() 【参考方案2】:

尝试像这样更改取消操作:

func cancelbutton(_ sender: UIButton)

    if let myView = sender.superview 
        myView.removeFromSuperview()
    

只需删除按钮的容器视图,而不是全局 myView。

【讨论】:

根据情节提要,子视图直接包含按钮,这是删除视图本身的最简单方法。为什么投了反对票?我不明白。 是的,我也不知道是谁投了反对票,你的答案会起作用 @Anbu.Karthik,是的,我们无法阻止过度自信但愚蠢的头脑。 ;)【参考方案3】:

我设法修复了删除问题,但目前我无法重新定位海关视图的位置,如下图所示,请帮助我。

【讨论】:

在这种情况下,最好的方法是使用在其中加载自定义单元格的 tableView。然后,每当您删除一个单元格时,剩余的单元格就会自动重新定位。

以上是关于IOS Swift3如何随机删除自定义UIView的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 中绘制自定义 UIView?

如何删除自定义uiview中的边框线?

如何使用 Swift 3 在 UIView 中覆盖 requiresConstraintBasedLayout?

如何在 iOS 开发中处理自定义事件?

swift Swift3删除tabar顶行并给出一个自定义tabar

如何在 Swift 中以编程方式从 UIView 中删除安全区域?