[MacOS Mojave 10.14.1, Xcode 10.1, Swift 4.2, приложение Cocoa]
Это мой первый проект Cocoa, который в прошлом занимался скромными разработками для iOS. Я провел два дня, пытаясь это и это безрезультатно. Я не могу поверить, насколько сложно заставить это работать на MacOS, учитывая, насколько это просто и эффективно в Visual Studio с Windows.
Итак, я создал прямой проект приложения Какао, и Main.storyboard поставляется с:
1) NSApplication (меню),
2) NSWindowController, который находится над NSWindow,
3) NSWindow, которое показывает «View Controller» в середине,
4) NSViewController и
5) NSView (где я поместил все свои объекты Какао).
(Стандартно из коробки)
У меня есть группа NSTextField
, организованная внутри NSView
, и я подключил их nextKeyView
выходы в (зацикленном) порядке, который мне нужен. У меня есть другие элементы управления внутри NSView, но так как я не хочу, чтобы на них были вкладки, я либо установил для их свойства Refuses First Responder
значение ticked
, либо для их Behaviour
установлено значение None
. Я также пытаюсь исправить это программно и в файле по умолчанию ViewController.swift
(где находится весь мой код) цикл, который перебирает мои текстовые поля и устанавливает некоторые свойства текстового поля.
override func viewWillAppear() {
for i in myTextFields {
i.value.isEditable = true
i.value.isEnabled = true
i.value.alignment = NSTextAlignment.center
// i.value.refusesFirstResponder = true
if i.key == FunctionsEnum.LSP {
i.value.becomeFirstResponder()
}
}
}
(где myTextFields
- словарь, сопоставляющий FunctionsEnums
справа NSTextField
.)
Я также пытался пересчитать заказ, используя:
let appWindow = self.view.window
appWindow?.recalculateKeyViewLoop()
Но, к сожалению, это не имеет никакого эффекта. Я не понимаю, почему NSView (или NSViewController) не имеет метода recalculateKeyViewLoop (), поскольку он является контейнером для всех элементов управления, которые я добавил. Да, для NSWindow может потребоваться пересчет по нескольким представлениям, но NSView мог бы выполнять свои локальные вычисления, если это единственное представление.
Я прочитал эти другие вопросы / ответы на эту тему:
Установка пользовательского порядка вкладок в приложении Какао
https://www.stevestreeting.com/2014/02/11/auto-layout-and-tab-ordering/
Порядок табуляции в конструкторе интерфейсов?
но ни один из предложенных советов, ни решений, кажется, не работают для меня.
Может кто-нибудь помочь мне с этим?
Нужно ли создавать подкласс для NSWindowController
или NSWindow
? Я положил вещи в неправильный контейнер? Нужно ли делегирование между NSViewController / NSView (ViewController.swift) что-то еще? У меня пропал какой-то другой необходимый код? Нужно ли вызывать некоторые протоколы, которые я пропустил?