Я пытаюсь получить доступ к view.window
внутри NSViewController-viewDidLoad
, но это нуль. Есть ли способ заставить окно загружаться внутри viewDidLoad
?`view.window` nil внутри` NSViewController-viewDidLoad`
ответ
Я уверен, что ответ на ваш прямой вопрос «нет»; вы не можете сделать загрузку окна изнутри -viewDidLoad
, вы просто находитесь в середине процесса загрузки nib в этот момент, и это то, что оно есть. В зависимости от того, как сконструирован ваш наконечник и внутренних деталей AppKit, вы можете обнаружить, что окно иногда загружается и подключается в -viewDidLoad
, но на него нельзя положиться, так как оно не гарантируется. Вероятно, вы захотите использовать -awakeFromNib
; он вызывается после того, как все объекты в nib были загружены и инициализированы, поэтому окно должно быть настроено в этой точке.
Вы можете получить (или дать название - что является более полезным) окно в этой ситуации в viewDidLayout Например.
наверху в классе ViewController у вас есть
@IBOutlet var bigView: NSView!
var toplevel: NSWindow?
затем добавить
override func viewDidLayout() {
super.viewDidLayout()
toplevel = bigView.window
}
вы можете запросить toplevel.firstResponder в любом другом месте в коде и получить ответ. , ,
Надеется, что это помогает
Проблемы заключается в том, что, на моем взгляде контроллер не загружается из кончика пера, так 'awakeFromNib' не дозвонились. – Ethan
ОК, пожалуйста, добавьте больше контекста на вопрос. – bhaller
Что я хочу знать, это самый ранний момент, когда я могу получить доступ к 'view.window' – Ethan