0

keyWindow投稿するように設定したいNSPanelがありますNSWindowDidBecomeKeyNotificationが、メソッドを呼び出してもmakeKeyWindow通知が投稿されません。以下は私のコードですが、何が問題なのかわかりません。

newPanel = [[NSPanel alloc]initWithContentRect:windowRect
                                         styleMask:NSUtilityWindowMask
                                           backing:NSBackingStoreBuffered 
                                             defer:FALSE];

    [[NSNotificationCenter defaultCenter]addObserver:self 
                                            selector:@selector(test:) 
                                                name:@"NSWindowDidBecomeKeyNotification" 
                                              object:newPanel];
    // Create a slider and add to the panel
    NSSlider *slider = [[NSSlider alloc]initWithFrame:NSMakeRect(0, 0, windowRect.size.width, windowRect.size.height)];
    [[newPanel contentView]addSubview:slider];
    // Set window attributes
    [newPanel setHasShadow:TRUE];
    [newPanel setFloatingPanel:TRUE];
    [newPanel setReleasedWhenClosed:TRUE];
    [newPanel setHidesOnDeactivate:TRUE];
    [newPanel setBecomesKeyOnlyIfNeeded:NO];
    [newPanel makeKeyWindow];
    [newPanel makeFirstResponder:slider];
    [newPanel orderFront:sender];

[newPanel makeKeyWindow];NSWindowDidBecomeKeyNotificationを呼び出すと、投稿され、-(void)test:(NSNotification*)aNotification呼び出されるはずです。しかし、それは呼び出されていません。

4

1 に答える 1

1

コードをコピーして新しいプロジェクトに貼り付けましたが、パネルが表示されませんでしたか? プロパティ thePanel を作成し (コンパイラは newPanel という名前が気に入らなかったため、理由はわかりません)、thePanel のすべての参照を self.thePanel に変更することで、これを機能させることができました。また、スタイル マスク引数 (styleMask:NSUtilityWindowMask | NSTitledWindowMask) に NSTitledWindowMask を追加し、makeKeyWindow コマンドを orderFront コマンドの後に移動するか、これら 2 つを makeKeyAndOrderFront:self.window に置き換えました。

于 2012-07-20T16:02:49.607 に答える