Руководство по добавлению 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
        }
    }
}
Другие вопросы по тегам