Swift / Cocoa - Как сделать плавающее окно временно не плавающим? - PullRequest
0 голосов
/ 19 июня 2019

Я создаю приложение для Mac, чье окно управляется NSWindowController.

Код WindowController.swift:

class WindowController: NSWindowController {

    override func windowDidLoad() {

        super.windowDidLoad()
        self.window?.center()
    }
}

Это окно имеет два NSViewController. Тот, который поставляется с самим окном, и тот, который открывается с помощью листа. Нажмите на кнопку.

Код ViewController.swift (основной вид):

class ViewController: NSViewController {

    override func viewDidLoad() {

        super.viewDidLoad()
    }

    override func viewDidAppear() {

        self.view.window?.level = .floating
    }
}

Код ExecutionViewController.swift (представление, открытое через segue):

class ExecutionViewController: NSViewController {

    override func viewDidLoad() {

        super.viewDidLoad()
    }

    override func viewDidAppear() {

        self.view.window?.level = .floating
    }

Как вы можете видеть, приложение плавает, что работает, оно на самом деле остается на вершине. Проблема в том, что ExecutionViewController имеет кнопку, которая запускает процесс. Во время этого процесса наступает момент, когда приложение должно временно не плавать. Что-то вроде

//Time for non-floating reached
self.view.window?.level = .normal //works!
ViewController.view.window?.level = .normal //doesn't work!
//Time for non-floating ended

Он пробовал это с segues, но это тоже не работает. Я предполагаю, что ViewController должен быть перезагружен здесь и снова выполнить viewDidAppear.

То, что я ищу, это в основном возможность передать .view.window.level = .normal в основной ViewController, не делая ничего другого.

Я не уверен, если это вообще возможно. Любая помощь высоко ценится.

...