Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS Swift3如何随机删除自定义UIView_Ios_Swift_Uiview - Fatal编程技术网

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

IOS Swift3如何随机删除自定义UIView,ios,swift,uiview,Ios,Swift,Uiview,我正在swift 3中构建一个iOS应用程序,在这里我正在创建动态UIView。我需要随机删除自定义视图。请帮帮我,我被这件事困扰了很长时间提前感谢 class ViewController: UIViewController { var myView: subView! var y : CGFloat! @IBOutlet weak var addButton: UIButton! override func viewDidLoad() {

我正在swift 3中构建一个iOS应用程序,在这里我正在创建动态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)
    }
}

正如您在上图中看到的,当我单击Close时,子视图(custome View)将关闭,但带有绿色的where As 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()

   }

尝试按以下方式更改取消操作:

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

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

您所做的错误是添加了多个子视图,而您选择的子视图并未删除。请修改您的代码,如下所示。 我所做的事情是,无论何时添加新的
子视图
,您都将设置其标记值,当您选择view以删除其标记值并在该标记值上放置
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=上次添加的视图。不是要关闭/删除的视图。必需的init?(coder aDecoder:NSCoder){super.init(coder:aDecoder)Bundle.main.loadNibNamed(“子视图”,所有者:self,选项:nil)self.addSubview(self.views)Bundle.main.loadNibNamed(“子视图”,所有者:self,选项:nil)self.addSubview(self.views)}override init(frame:CGRect){super.init(frame:frame)Bundle.main.loadNibNamed(“子视图”,所有者:self,选项:nil)views.frame=bounds self.addSubview(self.views)}请将代码附加到问题(通过编辑)中,不要在注释中添加太多代码(因为缺少格式而无法读取)嘿,只是想一想,为什么不改用tableview呢……您可以直接在
myView.actionButton
上添加标记,是的,我添加了它。谢谢。如果((对象是子视图)和&subView.tag==selectViewTagValue){object.removeFromSuperview()}subView.tag…如何在这里设置标记,正确吗?因为我出错了,请再次检查我的代码我犯了一个小错误。如果((对象是子视图)和&object.tag==selectViewTagValue){object.removeFromSuperview()}根据情节提要,子视图直接包含按钮,这是删除视图本身的最简单方法,请像这样更新您的条件。为什么要否决它?我也不知道是谁投了反对票,你的答案是肯定的work@Anbu.Karthik,是的,我们无法阻止过于自信但又愚蠢的头脑在这种情况下,最好的方法是使用tableView,其中加载自定义单元。然后,无论何时删除一个单元格,其余单元格都会自动重新定位自身。