10

アプリケーションにメイン ウィンドウを作成して、次の設定を行いました。

[self setLevel:kCGDesktopWindowLevel + 1];
[self setCollectionBehavior:
     (NSWindowCollectionBehaviorCanJoinAllSpaces | 
      NSWindowCollectionBehaviorStationary | 
      NSWindowCollectionBehaviorIgnoresCycle)];

これは、デスクトップの上に浮かぶ、非常にカスタムなウィンドウです。

さらに、これはメニューバー アプリケーションです ( LSUIElement)。

よし、何かが正しくない場合はアラートを表示する必要がある。これが私がやっている方法です:

NSAlert *alert = [NSAlert alertWithMessageText:@"" 
                                 defaultButton:@"" 
                               alternateButton:@"" 
                                   otherButton:@"" 
                     informativeTextWithFormat:@""];
[alert runModal];

もちろん、ボタンやその他のテキストを入力しました。

ここに私の問題があります: 私のアプリケーションが現在キー アプリケーションではなく、このアラートがポップアップ表示される場合、それはキー ウィンドウではありません。このような:

ここに画像の説明を入力

ウィンドウが選択されていないのがわかりますか? アプリのウィンドウ レベル全体を変更せずにこれを回避する方法はありますか? ありがとう!

4

3 に答える 3

11

アラートを表示するコードでアプリケーションをアクティブ化しようとしましたか?

[[NSRunningApplication currentApplication] activateWithOptions:0];

0 を渡すことがうまくいかない場合はNSApplicationActivateIgnoringOtherApps、オプションとして渡すことができますが、本当に必要でない限り、Apple はそれをお勧めしません (NSRunningApplication のドキュメントを参照してください)。


更新:アラートを実行する前にアクティブ化しました。これは、LSUIElement が設定された新しいアプリで機能します。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSAlert *alert = [NSAlert alertWithMessageText: @"Blah"
                                     defaultButton: @"Blah"
                                   alternateButton: @"Blah"
                                       otherButton: @"Blah"
                         informativeTextWithFormat: @"Blah"];

    [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateIgnoringOtherApps];
    [alert runModal];
}
于 2011-03-11T05:35:24.587 に答える
2

If you want to support 10.5 also. you can use

[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
于 2012-05-29T13:01:49.093 に答える