Переместить UIView из ViewController в окно - PullRequest
0 голосов
/ 11 мая 2018

Спасибо, что нашли время, чтобы прочитать таким образом. В общем, у меня есть UIView в моем UIViewController. Я хочу, чтобы пользователь мог нажать кнопку, а затем 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)
    }
}

но это не сработало. У кого-нибудь есть идеи, как этого добиться?

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Если ваш вид добавлен в окно, то 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)
0 голосов
/ 11 мая 2018

Вы не можете просто перенести подпредставление, которое находится в вашем UIViewController, в начало вашего UIWindow.

Вам необходимо:

  1. Удалить UIView изUIViewController.
  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)
    }
}
0 голосов
/ 11 мая 2018

Вы должны установить рамку для вида на var view = UIView()

, затем вы должны добавить в окно window.addSubview(view)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...