【问题标题】:Move UIView from ViewController to Window将 UIView 从 ViewController 移动到 Window
【发布时间】:2018-05-11 16:12:57
【问题描述】:

感谢您花时间阅读。所以基本上,我的UIViewController 中有一个UIView。我希望用户能够按下按钮,然后UIView 从我的UIViewController 移动到我的应用程序窗口,这样UIView 将首先是UIViewControllers。我唯一能想到的就是

class ViewController: UIViewController {

    var window = UIApplication.shared.keyWindow!
    var view = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(view)
    }

    func tappedAction() {
         window.bringSubview(toFront: view)
    }
}

但这没有用。有人对如何实现这一点有任何想法吗?

【问题讨论】:

    标签: ios swift uiview uiviewcontroller window


    【解决方案1】:

    您不能只将UIViewController 中的子视图带到UIWindow 的前面。

    你需要:

    1. UIViewController 中删除UIView
    2. UIView 添加到主UIWindow

    我选择这样做:

    import UIKit
    
    class ViewController: UIViewController {
    
        var customView: UIView!
    
        // Load the main view of the UIViewController.
        override func loadView() {
            view = UIView()
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Load the custom view that we will be transferring.
            self.customView = UIView(frame: .init(x: 100, y: 250, width: 250, height: 250))
            self.customView.backgroundColor = .red
            view.addSubview(customView)
            // Transfer the view. Call this method in your trigger function.
            transfer(self.customView)
        }
    
        func transfer(_ view: UIView) {
            // Remove the view from the UIViewController.
            view.removeFromSuperview()
            // Add the view to the UIWindow.
            UIApplication.shared.windows.first!.addSubview(view)
        }
    }
    

    【讨论】:

      【解决方案2】:

      您必须在var view = UIView()设置框架来回视图

      那么你应该添加到窗口window.addSubview(view)

      【讨论】:

        【解决方案3】:

        如果您的视图添加到窗口上,那么window.bringSubview(toFront: view) 将起作用,否则它将不起作用。

        如果您的视图添加到窗口上,那么您可以像这样使用bringSubview(toFront:): 示例:

                let window = UIApplication.shared.keyWindow!
                let view1 = UIView(frame: CGRect(x: window.frame.origin.x, y: window.frame.origin.y, width: window.frame.width, height: window.frame.height))
                window.addSubview(view1);
                view1.backgroundColor = UIColor.black
                let view2 = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 50))
                view2.backgroundColor = UIColor.white
                window.addSubview(view2)
                UIApplication.shared.keyWindow!.bringSubview(toFront: view1)
        

        所以你需要在窗口中添加你的视图:

            window.addSubview(view)
        

        【讨论】:

        • 我希望我的视图最初位于我的 UIViewController 上,然后如果用户使用函数 tappedAction() 点击按钮,则视图会从我的 UIViewController 转到键窗口。在我的问题中查看我更新的代码
        • bringSubview 仅适用于子视图,而不适用于其他视图。所以如果你想在窗口上显示视图,那么视图必须在窗口的层次结构中
        • 当用户点击按钮时,您需要从父视图中删除并添加到窗口中
        猜你喜欢
        • 1970-01-01
        • 2018-01-28
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多