SOに類似の質問がありますが、これにはひねりがあります。_statusItemがクリックされたときにNSMenuを使用してウィンドウをフォーカスしていないときにアクションを実行することはできません。
ユーザーがメニューバーにある自分のアプリアイコンをクリックしたときにアクションをトリガーする必要があります。
[_statusItem setTarget:self];
[_statusItem setAction:@selector(bringToFront:)];
が、これ_statusItem
がNSMenu
があります。アクションは、通常、私はこれを行うだろう前にそのウィンドウを持参、または他の言葉で、
[[[NSApplication sharedApplication] keyWindow] makeKeyAndOrderFront:self];
することです。
メニューを無効にすると、bringToFront:
がトリガーされます。
だから、私はNSMenuDelegate
方法menuWillOpen
を実装します、と思いました。
- (void)menuWillOpen:(NSMenu *)menu {
[[[NSApplication sharedApplication] keyWindow] makeKeyAndOrderFront:self];
}
しかし、問題があります。これは、アプリケーションウィンドウが選択されている場合は動作しますが、アプリが実行されていて、私がサファリを選択したとします。その後、私のアプリのウィンドウにはもう焦点がない、2000 Safariのウィンドウの後ろにある。今度は、メニューバーの自分のアプリのアイコンをクリックして、menuWillOpen
はトリガーされません。
私はそれが仕事意味をなさない作るために集中するウィンドウをもたらすために持つ、メニューバー上のアプリのアイコンをクリックすることで、集中するウィンドウを持参してください。
「NSApplication」通知は、あなたのアプリがアクティブステータスを取得/辞退するのに応じてポストされます。これに応じてあなたのステータス項目のメニューを有効/無効にしようとしましたか? – CRD
どうすればいいですか? – SpaceDog
何をしますか?通知の詳細については、 'NSApplication'のドキュメントを読んでください。 – CRD