2011-01-14 12 views
2

私はMAAttachedWindowを使用してMenubarのNSStatusItemの下にカスタムウィンドウを表示しています。 すべてうまくいきますが、ユーザーがウィンドウの外側をクリックしたときに簡単に隠すことができません。私はユーザーが期待しているので、この動作を実装したい。外部をクリックしたときにMAAttachedWindowを非表示にする

これはMAAttachedWindowを表示するために使用するコードです:

- (void)toggleAttachedWindowAtPoint:(NSPoint)pt { 
    if (!self.attachedWindow) { 
     self.attachedWindow = [[MAAttachedWindow alloc] initWithView:logView 
       attachedToPoint:pt 
       inWindow:nil 
       onSide:MAPositionBottom 
       atDistance:5.0]; 

    [self.attachedWindow setLevel:kCGMaximumWindowLevel]; 
} 

if(isVisible) 
    [self.attachedWindow makeKeyAndOrderFront:self]; 
else 
    [self.attachedWindow orderOut]; 
} 

このコードは、それをクリックをインターセプトカスタムビューでNSStatusItemによってトリガされます。

答えて

9

あなたは、ウィンドウのデリゲートメソッドを介してこれを行うことができるようになります。

- (void)windowDidResignKey:(NSNotification *)notification

は、ウィンドウのデリゲートとして自分自身を設定し、あなたのトグル方式に通じ呼び出すためにそれを実装します。

+0

ありがとう、このメソッドが存在するかどうかわかりませんでした。 –

1

これはカーターアレンの回答に基づいていますが、私は短い彼のwindowDidResignKey通知内のあなたがすることができませんreleaseattachedWindowで、EXEC_BAD_ACCESS背後にある理由を理解しようとしている時間のカップルを失ったとして、多分誰かに参考になっなりますですので、autorelease

- (void)windowDidResignKey:(NSNotification *)aNotification { 
    NSLog(@"MainWinDelegate::windowDidResignKey: %@", [aNotification object]); 

    if (fAttachedWindow && [aNotification object] == fAttachedWindow) { 
     [window removeChildWindow:fAttachedWindow]; 
     [fAttachedWindow orderOut:self]; 
     [fAttachedWindow autorelease]; 
     fAttachedWindow = nil; 
    } 
} 
関連する問題