Руководство по добавлению NSView в цепочку респондента с помощью Swift
Я прочитал этот документ. Видел этот ТАК вопрос (среди прочих). И взглянул на этот урок. Но из-за моей жизни я не могу заставить мою собственную раскадровку работать. Я использую код, найденный в этом ответе SO, чтобы вызвать новые представления и их контроллеры.
По сути, пользователю предоставляется 5 кнопок в начальном виде, и нажатие любой из них приведет к сдвигу другого вида слева. Все отлично работает, любой NSButtons
которые размещаются на новых представлениях, получают клики и делают то, что должны. Однако текстовые поля полностью недоступны: вы можете выбрать любой текст внутри, но не перезаписать.
Я предполагаю, что я не внедрил новый контроллер представления / представления в цепочку респондента правильно (но тогда почему кнопки работают, а текстовые поля нет?).
Разумное использование
self.resignFirstResponder()
а также
newViewController.becomeFirstResponder()
всегда возвращай истину. Я разместил их в различных начальных функциях жизненного цикла новых представлений, а также в реальных пользовательских NSViewControllerPresentationAnimator
в конце анимации.
Если переход - это предустановленный лист, модальный, поповер или что-то еще, то новое представление прекрасно воспринимает все действия / типизацию. Так что это определенно мой код.
Я знаю, что это нехорошая форма, но я схожу с ума: кто-то может привести пошаговый пример использования Swift?
[ Редактировать ] Arghhhh! Похоже, что из-за того, что я не проверял строку заголовка в окне приложения, он отказался от первого респондента. Жаль, мне очень понравилось чистое окно без заголовка....
1 ответ
В моем случае я хотел, чтобы в окне приложения не было строки заголовка. Если опция "Панель заголовка" не отмечена в разделе "Атрибуты IB" окна раскадровки, вам необходимо создать подкласс NSWindow и переопределить canBecomeMain
а также canBecomeKey
:
import Cocoa
class BTVWindow: NSWindow {
override var canBecomeKey: Bool{
get {
return true
}
}
override var canBecomeMain: Bool{
get {
return true
}
}
}