6

NSStatusItem次のようなカスタムビューでを使用するアプリの場合:

ここに画像の説明を入力してください

...次の場合に通知を受け取るにはどうすればよいですか。

  1. フルスクリーンアプリのため、ステータスバーが非表示になります
  2. 別のアイテムが追加/削除/サイズ変更されたため、ステータスアイテムが位置を移動しますか?

アイテムが場所を変更したときにカスタムビューを正しい位置に移動するには、両方が必要です。

4

1 に答える 1

11

方法があり-[NSStatusItem setView:]ます。ステータスアイテムにカスタムビューを設定すると、このビューは特別なステータスバーウィンドウに自動的に挿入されます。そして、メソッド-[NSView window]を使用してそのウィンドウにアクセスし、そのウィンドウを監視できますNSWindowDidMoveNotification

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
    NSStatusItem *statusItem = [self newStatusItem];
    NSView *statusItemView = [self newStatusItemView];
    statusItem.view = statusItemView;

    NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
    [dnc addObserver:self selector:@selector(statusBarDidMove:)
                name:NSWindowDidMoveNotification object:statusItemView.window];
}

- (void)statusBarDidMove:(NSNotification *)note
{
    NSWindow *window = note.object;
    NSLog(@"%@", NSStringFromRect(window.frame)); // i.e. {{1159, 900}, {24, 22}}
}

ステータスバーが表示または非表示になるたび、およびアイコンが移動されるたびに通知が届きます。これは、ポップアップパネルの場所を更新するチャンスです。

于 2012-07-17T10:09:38.500 に答える