クリックするNSStatusItem
とドロップダウンメニューが表示されます:
[statusItem setMenu:statusMenu];
メニューを使用しているため、このコードはステータス アイテムがクリックされたタイミングを検出しません。
[statusItem setAction:@selector(isClicked:)];
メニューを使用すると同時に、ステータス項目がクリックされたことを知るにはどうすればよいですか?
クリックするNSStatusItem
とドロップダウンメニューが表示されます:
[statusItem setMenu:statusMenu];
メニューを使用しているため、このコードはステータス アイテムがクリックされたタイミングを検出しません。
[statusItem setAction:@selector(isClicked:)];
メニューを使用すると同時に、ステータス項目がクリックされたことを知るにはどうすればよいですか?
これを実現するには、メニューのデリゲートを設定します。
まず、インターフェイス ファイル (.h) で、クラスを のデリゲートとして設定しNSMenu
ます。例えば:
@interface MyClass : NSObject <NSMenuDelegate>
. . .
@end
次に、実装ファイル (.m) で、ステータス項目を初期化するときに次のようなコードを使用します。
//your status item initialization code. Then:
[statusItem setMenu:statusMenu];
[statusMenu setDelegate:self];
必要に応じて、メニューにタイトルを付けます (Interface Builder でメニューを作成した場合は、Xcode Interface Builder の「Attribute Inspector」の下で実行できます)。これを行うと、他のメニューとの矛盾がなくなります。
次に、このメソッドをクラスの実装 (.m) ファイルに追加します。
-(void)menuWillOpen:(NSMenu *)menu{
if([[menu title] isEqualToString:@"Menu's title"]){
//RUN CODE WHEN STATUS ITEM IS CLICKED
}
}
それでおしまい!次のコードを使用して、メニューが閉じられたことを検出することもできます。
-(void)menuDidClose:(NSMenu *)menu{
if([[menu title] isEqualToString:@"Menu's title"]){
//RUN CODE WHEN MENU IS CLOSED
}
}
メニューを使用している場合でも、ステータス アイテムがクリックされたときを知ることができるようになりました。