Руководство по добавлению NSView в цепочку респондентов с помощью Swift

Я прочитал этот документ. Видел этот вопрос SO (среди другие). И ознакомился с этим руководством. Но для жизни я не могу заставить свою собственную раскадровку работать. Я использую код, найденный в этом ответе SO, чтобы вызвать новые представления и их контроллеры.

По сути, пользователю предоставляется 5 кнопок в начальном представлении, и щелчок по любой из них приведет к тому, что слева появится другое представление. Все работает нормально, любые NSButtons, размещенные в новых представлениях, получают клики и делают то, что должны. Однако текстовые поля полностью недоступны: вы можете выбрать любой текст внутри, но не перезаписывать.

Я предполагаю, что я неправильно внедрил новый контроллер представления/представления в цепочку респондента (но тогда почему кнопки работают, а текстовые поля - нет?).

Разумное использование

self.resignFirstResponder()

и

newViewController.becomeFirstResponder()

всегда возвращайте истину. Я поместил их в различные функции начального жизненного цикла новых представлений, а также в фактические пользовательские NSViewControllerPresentationAnimator в конце анимации.

Если переход является предустановленным листом, модальным, всплывающим окном или чем-то еще, то новое представление получает все действия/печать просто отлично. Так что это определенно мой код.

Я знаю, что это нехорошо, но я схожу с ума: может ли кто-нибудь привести пошаговый пример с использованием Swift?

[РЕДАКТИРОВАТЬ] Ааааааа! Похоже, что из-за того, что у меня была снята галочка с «Панель заголовка» в окне моего приложения, оно отказалось принимать первого ответчика. Позор, мне очень понравилось чистое окно без заголовка....


person Todd    schedule 16.06.2017    source источник
comment
Можно ли редактировать текстовые поля? Если вы можете выбрать текст, они реагируют на события мыши и находятся в цепочке респондентов.   -  person Willeke    schedule 16.06.2017
comment
Это странно: нет, это не так. Выбирается, но не редактируется. Вид также имеет более светлый цвет на фоне, когда он полностью работоспособен после предустановленного переходного перехода.   -  person Todd    schedule 16.06.2017


Ответы (1)


В моем случае я хотел, чтобы в окне приложения не было строки заголовка. Когда параметр «Панель заголовка» не отмечен в разделе «Атрибуты IB» окна раскадровки, вам необходимо создать подкласс NSWindow и переопределить canBecomeMain и canBecomeKey:

import Cocoa

class BTVWindow: NSWindow {

    override var canBecomeKey: Bool{
        get {
            return true
        }
    }

    override var canBecomeMain: Bool{
        get {
            return true
        }
    }
}
person Todd    schedule 16.06.2017