Я создаю приложение для 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, не делая ничего другого.
Я не уверен, если это вообще возможно. Любая помощь высоко ценится.