У меня есть подкласс NSBorderlessWindow NSWindow с прозрачным и непрозрачным фоном (поэтому он не прямоугольный по внешнему виду). Я добавил свои собственные кнопки, чтобы функционировать как кнопки закрытия и сворачивания, когда я нажимаю на них, но по какой-то причине окно не будет реагировать на CMD-W или CMD-M, как обычно. У меня есть набор подклассов NSWindow для возврата YES в canBecomeKeyWindow и canBecomeMainWindow.NSBorderlessWindow не отвечает на CMD-W/CMD-M
У моего NIB все еще есть все стандартные элементы меню, которые есть, когда вы создаете новый проект, включая элемент «Свернуть» в меню «Окно» с установленным по умолчанию ярлыком CMD-M. Он подключен, чтобы отправить performMiniaturize: первому ответчику. Однако он не включен, когда приложение запущено, поэтому кажется, что он должен запрашивать окно, если он может свести к минимуму, а окно говорит «нет» или что-то в этом роде. (Я все еще очень новичок в OSX/Cocoa.)
Что мне не хватает?
Кроме того, возможно, это связано с тем, что мое окно без полей имеет включенную тень, но в отличие от обычного озаглавленного окна, когда я делаю свое окно активным/передним окном, нажимая на него, тень не изменяется. Обычно окно, ориентированное на OSX, имеет немного большую/более темную тень, чтобы выделять ее больше, но моя никогда не меняет тень. Это похоже на то, что я что-то упустил, чтобы ОС рассматривала это окно как реальное/нормальное/главное окно или что-то еще, и в результате я теряю теневое изменение и работу CMD-W/CMD-M.
Я думаю, если вы измените селектор от -performMiniaturize: до -miniaturize: вы получите то, что хотите. -performMiniaturize: не просто отправляет окно на док-станцию, но также мгновенно выделяет кнопку миниатюры. Возможно, это то, что тебя подвешивает. – NSResponder
Вы не должны использовать префикс NS. Это префикс Apple для своих классов в Foundation, AppKit и Core Data. Если Apple когда-либо добавит класс NSBorderlessWindow, даже частный, их класс и ваш будут конфликтовать. Составьте свой префикс и используйте его. –
Peter: Класс не называется NSBorderlessWindow, это NSWindow, созданный с использованием флага NSBorderlessWindowMask. Я признаю, что это было сформулировано плохо. :) – Sean