1

OS X アプリケーションのメイン ウィンドウの下部にセカンダリ ウィンドウを追加しようとしています。最終的には、トグル ボタンが押されたときにウィンドウの下からアニメーション化されるようにすることを期待しています。私が知る限り、SDK でこれを行う最善の方法は、- [NSWindow addChildWindow:ordered:]. しかし、その関数を呼び出すと、セカンダリ ウィンドウは表示されますが、子ウィンドウとして追加されません。ボタンを押したときに呼び出される関数は次のとおりです。

- (IBAction)childToggleButtonPressed:(id)sender {
    [self.window addChildWindow:_secondaryWindowController.window ordered:NSWindowBelow];
    NSLog(@"Child Windows: %@", [[self.window childWindows] count]);
}

(最初に表示されるようにしているので、まだ閉じるコードを追加していません。)

そして、コンソールへの出力は次のとおりです。

2011-08-31 12:37:25.312 Playground[1712:707] Child Windows: (null)

ウィンドウが子として追加されない理由と、これを修正するためにできることを誰かが知っていますか?

役立つ可能性のある追加のコンテキストは、ウィンドウ自体とタイトル バーの両方の背景として画像を使用してカスタム ウィンドウを描画していることです。私が修正しているコードはhttp://cocoawithlove.com/2008/12/drawing-custom-window-on-mac-os-x.htmlにあります。

ありがとうございました!

編集:関数をオーバーライドして、- [NSWindow addChildWindow:ordered:]見つけた情報をログに記録しようとしましたが、ウィンドウ自体が関数に渡されていないことがわかりました。うまくいけば、これは誰かが問題を見つけるのに役立ちます!

4

1 に答える 1

-1

子ウィンドウに NSWindowControllers がないようにすることで、この問題を解決しました。明らかに、NSWindowController のウィンドウを子ウィンドウに割り当てることはできません。それらを NSWindow サブクラスに変換するとすぐに、上記のコードを使用してそれらを子ウィンドウとして追加できます (もちろん、_secondaryWindowController.window をウィンドウに置き換えます)。

つまり、NSWindowController のウィンドウを子ウィンドウとして使用せず、NSWindow のみを使用してください。

于 2011-09-02T18:36:59.087 に答える