У меня есть собственный подкласс NSWindow, который пользователь может переключать отображение одним нажатием кнопки. Я также хотел бы, чтобы окно исчезало, когда окно отказывается от статуса ключа (например, при нажатии пользователем вне окна).
У меня есть делегат, который реализует windowDidResignKey:
, но я считаю, что этот метод делегата вызывается только в первый раз, когда окно уходит в отставку.
Вот как я могу переключить отображение окна (через действие пользователя или windowDidResignKey):
- (void) toggleWindowAtPoint:(NSPoint)point
{
// Attach/detach window.
if (!attachedWindow)
{
attachedWindow = [[CustomWindow alloc] attachedToPoint:point];
attachedWindow.delegate = self;
[attachedWindow setLevel:NSMainMenuWindowLevel+1]; // show window in front of all other apps on desktop
[attachedWindow makeKeyAndOrderFront:self];
}
else
{
attachedWindow.delegate = nil;
[attachedWindow orderOut:self];
[attachedWindow release];
attachedWindow = nil;
}
}
Вот моя реализация windowDidResignKey:
- (void) windowDidResignKey:(NSNotification *)note
{
[self toggleWindowAtPoint:NSMakePoint(0, 0)];
}
Я обнаружил, что при первом отображении пользовательского окна вызывается windowDidResignKey:
. После каждого повторного отображения пользовательского окна windowDidResignKey:
не вызывается.