Пренебрежение листом с единственным текстовым полем с помощью escape-ключа

Итак, это моя настройка:

Тривиальный NSWindow с одним NSTextField для пользовательской записи плюс Принять 'NSButton.

Окно отображается для моего окна документа в виде листа, используя beginSheetModalForWindow:completionHandler:

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

Есть несколько похожих вопросов, в которых нам следует просто проверить cancelOperation где-то в цепочке ответчиков. Дело в том, что мой оконный контроллер (для окна/диалога на листе) даже не в цепочке ответчиков, когда я проверяю его в отладчике.

Для листа, отображаемого таким образом, что вышеупомянутая цепочка ответчиков все еще касается моего окна документа. Weird.

Поэтому любые подсказки о том, как правильно подключиться к cancelOperation или к клавише Escape, будут очень благодарны!

1 ответ

Поскольку ваш лист может быть отменен, вы должны, вероятно, добавить к нему кнопку "Отмена", чтобы сделать эту возможность понятной пользователю. Если вы это сделаете, и установите комбинацию клавиш этой кнопки Отмена на клавишу Escape в IB, тогда она должна просто работать. Я думаю, что важно, чтобы название кнопки было фактически "Отмена"; Я помню, что читал, что AppKit делает некоторую специальную магию клея за кулисами на основе этого имени кнопки.

И, кстати, кажется, что ваш оконный контроллер должен находиться в цепочке ответчиков, предполагая, что он действительно установлен NSWindowController правильно; см. документ Apple здесь. Не уверен, почему отладчик указывает, что это не так, но это должно быть, насколько я могу судить. Если это действительно так, это может означать что-то более глубоко неправильное в том, как вы настраиваете лист. Однако я не уверен в этом, так как сам не пробовал.

licensed under cc by-sa 3.0 with attribution.