2

私はMacプログラミングに非常に慣れていません。3日前に始めたばかりです。
メイン ウィンドウ
にボタンが 1 つあるサンプル アプリを作成しています。このコードを使用して新しい wndowcontroller を開きます。

ThirdViewController *tvc = [[ThirdViewController alloc] initWithWindowNibName:@"SecondViewController"];

     [tvc showWindow:self];

これは正常に機能しますが、ボタンをもう一度押すと同じウィンドウが再び開くため、クリックするたびに画面に+1ウィンドウが表示されます。
私が欲しいのは、新しいウィンドウが既に画面に表示されている場合、ボタンは同じウィンドウを追加できないということです。

前もって感謝します:)

4

1 に答える 1

3

ボタンがクリックされるたびにそのコードが実行されている場合、効果的に新しいウィンドウコントローラーを作成し、そのウィンドウをnibファイルからロードし、ボタンがクリックされるたびにそのウィンドウを表示しています.

これを防ぐための標準的なアプローチは、最初はインスタンス変数を持ちnil、ウィンドウ コントローラーを 1 回だけ割り当てることです。その後、インスタンス変数はnilもはや存在しないため、それをテストして、別のコントローラーを作成して nib ファイルを再度ロードすることを避けることができます。

たとえば、アプリケーション デリゲートで次のインスタンス変数を宣言するか、3 番目のウィンドウ コントローラーを担当するコントローラーを宣言できます。

ThirdViewController *tvc;

そして、ボタンがクリックされたとき:

if (nil == tvc) {
    // If tvc is nil then it's the first time this code is being executed
    tvc = [[ThirdViewController alloc] initWithWindowNibName:@"SecondViewController"];
}

[tvc showWindow:self];
于 2011-09-09T14:02:32.320 に答える