#swift #xib #nsviewcontroller #nswindowcontroller
#swift #xib #nsviewcontroller #nswindowcontroller
Вопрос:
Я создаю фреймворк macOS, который запускается в начале процесса входа в систему, и я хочу показать некоторую информацию пользователю в окне. У меня есть NSWindowController с файлом .XIB, и это главное окно для моей платформы.
Я хотел бы добавить больше presentAsSheet в другое представление. Для этого я создал NSViewController с .XIB, чтобы определить пользовательский интерфейс, который я хочу представить в модальном, но здесь я полностью заблокирован, потому что получение contentViewController окна всегда равно нулю
Я инициализирую свое главное окно следующим образом:
func run() {
NSApp.activate(ignoringOtherApps: true)
mainWC = MainWC(windowNibName: "MainWC")
guard mainWC.window != nil else {
return
}
NSApp.runModal(for: mainWC.window!)
}
Где я пытаюсь представить другой NSViewController «
self.window?.contentViewController?.presentAsSheet(customViewController)
В моем MainWindowController я делаю это:
@IBAction func btnAction(_ sender: Any) {
let customModal = CustomModal(windowNibName: "CustomModal")
self.window?.beginSheet(customModal.window!, completionHandler: { code in
print(message: "Clicked")
})
}
Модальный никогда не появляется
Ответ №1:
Вы не можете представить представление, пока окно и представление содержимого не будут загружены
Либо внутри контроллера окна в windowDidLoad()
override func windowDidLoad() {
super.windowDidLoad()
// present the view
}
или даже в viewDidLoad
контроллере представления
override func viewDidLoad() {
super.viewDidLoad()
// present the view
}
Комментарии:
1. @AlexGonzalez Интересно, решили ли вы эту проблему. Я сталкиваюсь с аналогичной проблемой. Я создаю плагин авторизации для macOS. Я не могу загрузить NSViewController внутри NSWindow.
2. @iBuilt Вы нашли какое-либо решение?
3. @AlexGonzalez Да, я сделал. Я инициализировал ViewController внутри метода. Я сделал объект ViewController глобальной переменной в классе и инициализировал его в методе viewDidLoad, и он отлично сработал.