Как и в случае с this question, я пытаюсь установить первый ответчик на первый из трех NSTextField
s в очень простом приложении. Рекомендации там (установить первый ответчик Window
в построителе интерфейса), похоже, больше не применяются, по крайней мере, когда не используются раскадровки. Объект Window
действительно имеет выход initialFirstResponder
, но я не могу найти способ установить его с помощью drag, ctrl-drag и т. Д. В любом направлении в/из NSTextField.Настройка initialFirstResponder в приложении с раскадровкой OSX
Структура, предоставленная мной, содержит сцену Window Controller (сама по себе пустое окно), связанная с сценой View Controller (которая, в свою очередь, содержит мой набор NSTextField
s и метки).
Мое подозрение в том, что существует некоторая предпосылка/связь по умолчанию, которую Xcode испекли в моем приложении, что заставляет контроллер Windows автоматически загружать определенный вид во время выполнения, и поэтому невозможно связать первоначального ответчика, что он не знайте о времени сборки. Который тогда оставляет меня интересно, какой жизненный цикл вызывает, какой объект является правильной точкой для вызова self.view.window.initialFirstResponder = myTextField
, пока не стало слишком поздно, и как наиболее правильно получить доступ к этому объекту. viewWillAppear
или viewDidLoad
в контроллере просмотра чувствуют себя хорошо, но ни один из них не имеет достоверного влияния (первоначально активный NSTextField
варьируется от запуска до запуска, иногда появляется возможность отслеживать изменения кода, но в то же время нет).
Я отправил код до сих пор на GitHub
Yeh, вот почему я задавался вопросом, в какой момент жизненного цикла приложения можно было программно установить начальныйFirstResponder окна - я не в курсе жизненного цикла приложения, окна, вида и контроллера в мире раскадровки. Кроме того, это неправильный вызов. Из документов: «Используйте метод NSWindow makeFirstResponder:, а не этот метод, чтобы сделать объект первым ответчиком. Никогда не вызывайте этот метод напрямую». startFirstResponder - это метод, который можно реализовать, чтобы отказаться от первого запроса. Тем не менее, makeFirstResponder тоже не работает для меня! – Chris
лично я либо вызываю его в init, либо в viewDidLoad :. В любом случае при условии, что элемент управления (NSTextField и т. Д.) Привязан к @IBOutlet правильно, вы можете легко вызвать self.whateverControl.becoemFirstRsponder() на этапе init() или viewDidLoad().Любой из них будет происходить до того, как наследующий наследник действительно вступит в силу. –
makeFirstResponder возвращает NO для меня из viewDidLoad – Chris