Подтвердить что ты не робот

Не может редактировать NSTextField в листе во время выполнения

При нажатии на кнопку я хочу отобразить лист с запросом электронной почты + пароль с параметрами сохранения и отмены. Пользовательский интерфейс настроен, действия на месте, и лист появляется и отменяется, как ожидалось. Проблема в том, что я не могу редактировать ни один из NSTextFields во время выполнения; они кажутся отключенными, и звук ошибки ОС воспроизводится при каждом нажатии клавиши, когда лист открыт. Я читал о том, что UIActionSheet подходит, но это не приложение для iOS.

Текстовые поля включены и ранее работали на другой панели. Я убедился, что ссылки IBAction не повреждены, но я даже не уверен, как устранить неполадки.

Как насчет листа приведет к тому, что в противном случае здоровый NSTextField откажется от ввода?

// show the sheet
-(IBAction)showAccount:(id)sender {
    [NSApp beginSheet:accountWindow 
       modalForWindow:prefsWindow
        modalDelegate:self 
       didEndSelector:NULL 
          contextInfo:NULL];
}

// cancel/hide the sheet
-(IBAction)cancelAccount:(id)sender {
    [NSApp endSheet:accountWindow];
    [accountWindow orderOut:nil];   
}

Изменить: я только что обнаружил, что я могу щелкнуть правой кнопкой мыши и вставить текст в каждое поле, но я не могу выбрать или удалить. Похоже, что NSTextFields не получают фокуса и не получают ввод с клавиатуры, как обычно. Я также забыл упомянуть, что моя кнопка "Сохранить" вызывает и правильно выполняет связанный с ней метод.

4b9b3361

Ответ 1

В представлении не обязательно должна быть строка заголовка.

См   Почему NSWindow без styleMask: NSTitledWindowMask не может быть keyWindow?

В каких состояниях: если вы хотите, чтобы окно без заголовка могло стать ключевым окном, вам необходимо создать подкласс NSWindow и переопределить -canBecomeKeyWindow следующим образом:

- (BOOL)canBecomeKeyWindow {
    return YES;
}

Это сработало для меня.

Ответ 2

Оказывается, я случайно нашел решение, которое я теперь отправлю для потомков...

В представлении, которое используется в качестве листа (NSWindow или NSPanel), должна быть строка заголовка. Как только я переключился в инспектор Interface Builder (окно → Внешний вид → панель заголовка) Я перекомпилировал и NSTextFields выделил, добавил вкладку и принял вход, как и в любом другом представлении. Не уверен, почему строка заголовка имеет значение, но там у вас есть.