2017-05-26 22 views
3

我正在swift 3中创建一个iOS应用程序,我正在创建动态UIViews。我需要随机删除自定义视图。请帮助我,我长期坚持这一点。 由于事先IOS Swift3如何随机删除自定义UIView

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

enter image description here

enter image description here

enter image description here

,你可以在上面的图片中看到,当我在关闭点击子视图(custome查看)关闭,但其中因为具有绿色的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() 

    } 
+0

已在子视图类添加的代码是什么? – RMRAHUL

+0

您持有myView =您最近添加的视图。不是您想要关闭/删除的视图。 – RMRAHUL

+0

所需的init(编码器aDecoder:NSCoder)? { super.init(编码器:aDecoder) Bundle.main.loadNibNamed( “子视图”,店主:自我,选择:无) self.addSubview(self.views) Bundle.main.loadNibNamed( “子视图”,拥有者:自,选项:无) self.addSubview(self.views) } 倍率的init(帧:的CGRect) { super.init(帧:帧) Bundle.main.loadNibNamed(“subView”,owner:self,options:nil) views.frame = bounds self.addSubview(self.views) } –

回答

2

你做错了的事情是你添加了多个视图的子视图,为什么你选择不会删除。请修改您的代码,如下所示。 我所做的事情是,无论何时您将添加新的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) 

    } 
+0

你可以直接在'myView.actionButton'上添加标签 –

+0

是的,我添加了它。谢谢。 –

+0

if((object is subView)&& subView。标签== selectViewTagValue) { object.removeFromSuperview() } subView.tag ...我怎么能在这里设置标签,这是正确的?作为即时得到错误 –

0

试图改变取消操作是这样的:

func cancelbutton(_ sender: UIButton) 
{ 
    if let myView = sender.superview { 
     myView.removeFromSuperview() 
    } 
} 

只是删除按钮的容器视图,而不是全球MyView的。

+0

downvote的原因, –

+0

根据故事板,子视图直接包含按钮,这是删除视图本身最简单的方法。为什么倒投了呢?我不明白。 –

+0

雅我也不知道谁分配downvote,你的答案将工作 –

1

我设法固定删除的问题,但目前我无法搬迁的立场海关的看法,显示在下面的图片,请帮助我。

enter image description here enter image description here

+0

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