Конечно.В классе делегата приложения вы можете использовать NSWorkspace
, чтобы получать уведомления, когда приложение становится активным (NSWorkspaceDidActivateApplicationNotification
) или уходит в отставку (NSWorkspaceDidDeactivateApplicationNotification
).См. Документацию по NSWorkspace
для получения дополнительной информации.
В вашем классе контроллеров вы бы сделали что-то вроде этого:
- (id)init {
if ((self = [super init])) {
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(appDidActivate:)
name:NSWorkspaceDidActivateApplicationNotification
object:nil];
}
return self;
}
- (void)dealloc {
[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
[super dealloc];
}
- (void)appDidActivate:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSLog(@"userInfo == %@", userInfo);
}
Основные моменты в основномчто вам нужно зарегистрироваться, чтобы получать уведомления, как показано в -init
.Вы должны повторить код, чтобы добавить другого наблюдателя для каждого дополнительного имени уведомления, которое вы хотите (например, NSWorkspaceDidDeactivateApplicationNotification
).
Еще одна важная вещь, которую следует запомнить, - это удалить себя в качестве наблюдателя в -dealloc
(или в другом месте).), так что NSWorkspace
не пытается уведомить ваш объект контроллера после его освобождения + dealloc'd (и больше не будет действительным).
В указанном методе -appDidActivate:
делайте все, что вынужно с информацией о приложении в вопросе.