2012-02-25 13 views
0

アイテムをドラッグできるステータスアイテムが必要だったのでカスタムビュークラスを作成しました。ここでNSStatusItemのカスタムNSViewクラス内のNSMenuがステータスバーの下部に表示されない

は、ビューの定義です:私のApplicationDelegate.mで

@interface DragStatusView : NSImageView <NSMenuDelegate>{ 
    BOOL highlight; 
} 
@end 

私はNSStatusItemをインスタンス化し、そして私のDragStatusViewのインスタンス。 DragStatusViewでイメージを設定し、そのメニューをいくつかのNSMenuItemを含むNSMenuのインスタンスに設定します。ここで

- (void)applicationDidFinishLaunching:(NSNotification *)notification 
{ 
    // Install icon into the menu bar 
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; 

    NSImage *statusImage = [NSImage imageNamed:@"Status"]; 
    [statusItem setImage:statusImage]; 




    [menuItem setTitle:NSLocalizedString(@"Special Status", @"imgur menu item text")]; 
    CGFloat itemHeight = [[NSStatusBar systemStatusBar] thickness]; 
    NSRect itemRect = NSMakeRect(0.0, 0.0, NSSquareStatusItemLength, itemHeight); 

    DragStatusView* dragView = [[DragStatusView alloc] initWithFrame:itemRect]; 
    [dragView retain]; 

    [dragView setImage:statusImage]; 
    [dragView setMenu:menu]; 

    [statusItem setHighlightMode:YES]; 
    [statusItem setView:dragView]; 
} 

がポップアップするメニューをトリガーDragStatusViewコントローラのメソッドです:あなたは、ステータス項目をクリックすると

- (void)mouseDown:(NSEvent *)event { 
    [[[NSApp delegate] statusItem] popUpStatusItemMenu:[self menu]]; // or another method that returns a menu 
} 

このほとんどが作品、しかしメニューが高すぎると表示されます。それがクリックした後、どのように見えるかhttp://imgur.com/fpJcd,quS3c#1

:それはクリックする前にどのように見えるか

http://imgur.com/fpJcd,quS3c#0(メニューは画面の上部に表示されます - ああ!)

どのようにメニューが表示さで作ることができますステータスバーの下部?

ありがとうございます!

答えて

1

最終的には動作しました。

コードをここで見ることができます:https://github.com/zbuc/imgurBar/blob/master/imgur/StatusItemView.m

私はかなりわからないんだけど、なぜこのコード

https://github.com/zbuc/imgurBar/blob/master/imgur/ApplicationDelegate.m しかし、私は不快になります。境界矩形を少しずつ違うようにしていますが、私は今この作業を正確に行うことができません。

+1

リンクが機能していません。あなたのコードに別のリンクを教えてください。 –

+0

ヘッドアップに感謝、更新されたリンク – ashgromnies

1

どのようにメニューをポップアップしていますか?あなたがしたいことは次のようなものです:

- (void)mouseDown:(NSEvent *)event { 
    [statusItem popUpStatusItemMenu:[self menu]]; 
} 

もちろん、あなたのビューにはステータス項目への参照が必要です。

+0

私はそれを実際には...含む答えを編集しました – ashgromnies

+1

奇妙な...私はこれまでに起こったとは思わない。ビューのフレームサイズが正しく設定されていますか? – Wevah

+0

これでNSRectに渡すものは何でも: 'DragStatusView * dragView = [[DragStatusView alloc] initWithFrame:NSMakeRect(0、30、30、30)];'何も違いはないようです。 – ashgromnies

関連する問題