首页 > 解决方案 > 如何从超级视图中删除以编程方式创建的 UIView

问题描述

我想在从 API 调用加载内容的同时实现加载覆盖,但是当我去关闭视图时;我没有成功。

func viewLoading(show:Bool, boxView: UIView, error: Bool, errorMessage: String){
    let myNewView=UIView(frame: CGRect(x: 0, y: 0, width: boxView.frame.width, height: boxView.frame.height))

    if show{
        // Change UIView background colour
        myNewView.backgroundColor = UIColor.black.withAlphaComponent(0.75)
        myNewView.isOpaque = false
        // Add rounded corners to UIView
        myNewView.layer.cornerRadius = boxView.layer.cornerRadius

        let activityView = UIActivityIndicatorView(style: .whiteLarge)
        activityView.center = myNewView.center

        activityView.startAnimating()

        boxView.addSubview(myNewView)
        myNewView.addSubview(activityView)
    }else{
        print("Done")
        DispatchQueue.main.async(execute: { () -> Void in
            myNewView.removeFromSuperview()
            self.view.bringSubviewToFront(boxView)
        })
        myNewView.isHidden = true
    }
}

其他选项都没有奏效,我迷失了解决方案。

编辑:我希望相同的功能在一个视图控制器中容纳三个不同的视图。

标签: swift

解决方案


每次调用该方法时,您都在创建一个新视图,然后您试图消除该新创建的视图。相反,您应该在显示视图时保存该视图的引用,并removeFromSuperview在需要隐藏它时调用该实例。


推荐阅读