9

次のメソッドを持つカスタムNSWindowクラスがあります。

- (void)setupWindowForEvents{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignMainNotification object:self];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:self];
}

-(void)windowDidResignKey:(NSNotification *)note {
    NSLog(@"notification");
    [self close];
}

私は電話します[_window setupWindowForEvents];が、windowDidResignKey決して呼ばれません。
これが私がNSWindowと呼ぶ方法です。ステータスバーアイテムをクリックすると、次makeKeyAndOrderFrontのようにウィンドウがステータスバーアイテムのすぐ下に表示されます。ここに画像の説明を入力してください

ウィンドウがフォーカスを失ったときに通知が表示されない理由はありますか?私は両方を使用NSWindowDidResignMainNotificationNSWindowDidResignKeyNotificationて、これらのいずれかが機能するかどうかを確認しましたが、どれも機能していません。

4

1 に答える 1

11

そもそも実際にはキーではないため、通知が届かない可能性があります。ウィンドウはフチなしのように見え、フチなしウィンドウはデフォルトでキーウィンドウのステータスを取得しません。

ウィンドウサブクラスで、次のメソッドで必ずYESを返します。

- (BOOL)canBecomeKeyWindow { 
    return YES; 
}

- (BOOL)canBecomeMainWindow { 
    return YES; 
}
于 2012-12-31T01:15:15.017 に答える