2013-09-21 1 views
2

Обычно закрытие окна с ключом опции закрывает все окна приложения. В моем приложении я хотел бы закрыть только окна, связанные с окном, которое пользователь закрывал. Как я могу это сделать? Я могу реализовать windowShouldClose для всех моих окон, но как узнать, в каком окне пользователь нажал?Перехват опции-закрыть

+0

Посмотрите на NSWindow, NSWindowController и делегат для NSWindow. Подкласс может помочь. Также вы, вероятно, захотите добавить что-то в свой делегат приложения. – uchuugaka

+0

Также NSDocument и NSDocumentController, предполагая, что ваше приложение основано на документе. –

+0

Можете ли вы уточнить? – user2802999

ответ

1

Вы можете увидеть, если ключ варианта удерживались в том случае, которая обрабатывается так:

([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask)!=0

Если это в ответ на пользователь нажав кнопку закрытия окна, то вы можете найти окно, которое было нажато так: [[NSApp currentEvent] window]

Я полагаю, вы также должны проверить, что [NSApp currentEvent] является событием мыши и т. д., но похоже, что эта комбинация тестов должна предоставить вам информацию, которую вы хотите.


Если, с другой стороны, это пользователь выбрать «Закрыть окно» команды из меню «Файл» с дополнительным ключом, удерживая нажатой, вы можете переопределить метод performClose: из NSWindow реализацией по умолчанию для ваш собственный, где вы бы сделали тест currentEvent выше, чем позвонить [super performClose: sender]

+0

Я бы не стал проверять, что 'currentEvent' является событием мыши. Элемент меню мог быть вызван с помощью инструмента доступности (например, VoiceOver) или с помощью специальной комбинации клавиш. Если был вызван метод действия, к которому подключен элемент меню, это достаточно основательно. –

+0

Ах, я предполагал, что вопрос касался кнопки управления кнопками в верхнем левом углу окна. Я думаю, что вариант, щелкнув пункт меню «Закрыть окно», имеет тот же эффект. –

+0

Прошу прощения, я новичок в Cocoa. Как перехватить действие пункта меню, которое вызывается для окна «Закрыть окно»? Это то, что предоставляется системой, это не пункт меню, который я определяю. Мне нужно перехватить его перед тем, как он пройдет, и попросит закрыть все остальные окна. – user2802999

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