2015-05-11 2 views
0

В моем приложении MAC в одном случае я запрашиваю у пользователя окно и даю ему два варианта (например, кнопки «Сохранить и отменить»). Я хочу заставить пользователя выбрать одну из двух кнопок, чтобы закрыть окно.OSX: запретить закрытие окна при нажатии пользователем команды cmd + w

Но в настоящее время я нахожу, что если пользователь нажимает клавишу «Command + w», когда окно имеет фокус, окно закрывается. В файле ресурсов .xib снимите флажок «закрыть», но это отключит параметр закрытия в пользовательском интерфейсе окна.

Как я могу убедиться, что мое окно игнорирует клавишу «Command + w» и остается без закрытия.

Вы также попытались удалить уведомление, добавив ниже код в метод awakeFromNib, но не помогли.

[[NSNotificationCenter defaultCenter] removeObserver:NSWindowWillCloseNotification ]; 

также пытались реализовать «windowShouldClose» метод делегата и вернуть NO, но этот метод никогда не вызывается. В документации также говорится, что этот метод не является надежным.

ответ

0

Мне недавно пришлось решить аналогичную проблему. Я не уверен, что это «правильный» способ сделать это. Но это сработало для моих целей и могло сработать для вас.

По умолчанию, я думаю, элемент меню «Закрыть окно» (CMD + W) привязан к действию «performClose» для первого ответчика. Если вы удалите это привязку и вместо этого привязываетесь к пользовательскому IBAction на своем делетете или главном оконном контроллере приложения, это позволяет условно вызывать метод закрытия текущего ключевого окна, если он не соответствует экземпляру, который вы хотите сохранить.

@property (strong, nonatomic) MyWindowController *unstoppable; 
-(IBAction)killActiveWindow:(id)sender 
{ 
    NSWindow *keyWindow = [[NSApplication sharedApplication]keyWindow]; 
    if ([keyWindow isNotEqualTo: unstoppable.window]){ 
     NSLog(@" CMD+W Closing Window %@",keyWindow.title); 
     [keyWindow close]; 
    } 
} 
0

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

В любом случае делегат окна может реализовать -windowShouldClose:, чтобы контролировать, разрешено ли закрывать окно. Вы можете сделать объект (часто оконным контроллером) своим делегатом, объявив, что он принимает протокол NSWindowDelegate и подключает выход delegate окна к этому объекту.

Смежные вопросы