Обычно закрытие окна с ключом опции закрывает все окна приложения. В моем приложении я хотел бы закрыть только окна, связанные с окном, которое пользователь закрывал. Как я могу это сделать? Я могу реализовать windowShouldClose для всех моих окон, но как узнать, в каком окне пользователь нажал?Перехват опции-закрыть
ответ
Вы можете увидеть, если ключ варианта удерживались в том случае, которая обрабатывается так:
([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask)!=0
Если это в ответ на пользователь нажав кнопку закрытия окна, то вы можете найти окно, которое было нажато так: [[NSApp currentEvent] window]
Я полагаю, вы также должны проверить, что [NSApp currentEvent]
является событием мыши и т. д., но похоже, что эта комбинация тестов должна предоставить вам информацию, которую вы хотите.
Если, с другой стороны, это пользователь выбрать «Закрыть окно» команды из меню «Файл» с дополнительным ключом, удерживая нажатой, вы можете переопределить метод performClose:
из NSWindow
реализацией по умолчанию для ваш собственный, где вы бы сделали тест currentEvent
выше, чем позвонить [super performClose: sender]
Я бы не стал проверять, что 'currentEvent' является событием мыши. Элемент меню мог быть вызван с помощью инструмента доступности (например, VoiceOver) или с помощью специальной комбинации клавиш. Если был вызван метод действия, к которому подключен элемент меню, это достаточно основательно. –
Ах, я предполагал, что вопрос касался кнопки управления кнопками в верхнем левом углу окна. Я думаю, что вариант, щелкнув пункт меню «Закрыть окно», имеет тот же эффект. –
Прошу прощения, я новичок в Cocoa. Как перехватить действие пункта меню, которое вызывается для окна «Закрыть окно»? Это то, что предоставляется системой, это не пункт меню, который я определяю. Мне нужно перехватить его перед тем, как он пройдет, и попросит закрыть все остальные окна. – user2802999
- 1. Перехват WebView
- 2. Перехват localStorage.getItem()
- 3. Перехват onOptionsItemSelected
- 4. перехват контактов
- 5. Перехват * .aspx
- 6. Перехват XHR
- 7. Перехват http POST-запросов
- 8. Вручную перехват сеанса WCF
- 9. Перехват событий пейджера XPages
- 10. Перехват NSMenu ключевые события
- 11. TD Перехват уравнения
- 12. Перехват пакетов на openvswitch
- 13. Unity перехват и конструкторы
- 14. T4 Перехват шаблона
- 15. Перехват вызовов по свойствам
- 16. Grails: Перехват запросов Форма
- 17. перехват Задача календаря, встречи
- 18. Перехват и переопределение микросервиса
- 19. Перехват и исключения Unity
- 20. Перехват методов Android
- 21. Перехват сигналов из процессов
- 22. Перехват UINavigationController - popViewControllerAnimated:
- 23. Mule - Перехват всех потоков
- 24. Слово ленты Команда Перехват
- 25. Перехват a4j: commandButton request
- 26. Grails: Перехват начала запроса
- 27. Перехват HTTP-запросов
- 28. ли packetbeat поддержки перехват
- 29. Перехват def в блоке
- 30. Перехват намерения в Android
Посмотрите на NSWindow, NSWindowController и делегат для NSWindow. Подкласс может помочь. Также вы, вероятно, захотите добавить что-то в свой делегат приложения. – uchuugaka
Также NSDocument и NSDocumentController, предполагая, что ваше приложение основано на документе. –
Можете ли вы уточнить? – user2802999