невозможно редактировать NSTextField в листе во время выполнения - PullRequest
33 голосов
/ 27 сентября 2011

При нажатии на кнопку я хотел бы отобразить лист с приглашением по электронной почте + пароль с вариантами сохранения и отмены. Пользовательский интерфейс полностью настроен, действия выполнены, и лист появляется и отменяется, как и ожидалось. Проблема в том, что я не могу редактировать ни одно из полей NSTextFields во время выполнения; они кажутся отключенными, и звук ошибки ОС воспроизводится при каждом нажатии клавиши, когда лист открыт. Я прочитал на SO, что 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 не получают фокус и не получают ввод с клавиатуры, как обычно. Я также забыл упомянуть, что моя кнопка «Сохранить» вызывает и правильно выполняет связанный с ней метод.

Ответы [ 2 ]

80 голосов
/ 27 сентября 2011

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

Представление, используемое в качестве листа (NSWindow или NSPanel), должно иметь заголовокbar. Как только я переключил это в инспекторе Интерфейсного Разработчика (флажок Окно → Оформление → Панель заголовка), я перекомпилировал и NSTextFields выделил, добавил вкладку и принял ввод, как в любом другом представлении.Не уверен, почему заголовок имеет значение, но у вас есть это.

39 голосов
/ 11 сентября 2012

Представление не обязательно должно иметь строку заголовка.

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

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

- (BOOL)canBecomeKeyWindow {
    return YES;
}

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

...