2011-09-21 4 views
0

私のアプリには設定ウィンドウがあります。私はそれがどのように1つのウィンドウを開き、 "設定"?

- (IBAction)openPreferences:(id)sender { 

    NSWindowController *windowController = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"]; 
    [windowController window]; 
} 

このコードを使用してプレスコマンド、は再び、何度も何度も新しい環境設定ウィンドウが再び、何度も何度も開かれます場合は...

どのように開いている一つのウィンドウのみ開きますか?ありがとう!

答えて

5

だからこれは私がそれを解決する方法ですwindowControllerあなたのAppDelegateのインスタンス変数を作成し、

- (IBAction)openPreferences:(id)sender 
{ 
    if(windowController == nil) 
     windowController = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"]; 
    [windowController showWindow:sender]; 
} 
+0

ありがとうございます!本当に助けてくれる! –

+0

私は助けが必要です!私はこのコメントの上にコードを使用すると、私のアプリでは、1つだけの環境設定ウィンドウを開くことがあります。そのとおり!!!しかし!私が彼を閉じて "command"を押すと、もう一度これは効果がありません。どのようにそれを修正する? –

+0

そのウィンドウ用のインタフェースビルダーでは、「閉じたときに解放する」チェックボックスがオフになっていることを確認してください。 –

0

に開いて設定を変更... 私はgetInstanceというメソッドを持つクラス「MyPreferencesWindowController」を持っています。このメソッドは、環境設定ウィンドウを取得するときに呼び出されます。このソリューションはシングルトン技術を利用しています。

Documentクラスで今すぐ
/** 
Method in my MyPreferencesWindowController.m file 
with a corresponding method in the .h file. 
*/ 
+(id) getInstance { 

    static PreferencesWindowController *instance = nil; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{ 
     instance = [[self alloc] init]; 
    }); 
    return instance; 
} 

、次の操作を行い、設定ウィンドウを表示したい:

-(IBAction) showPreferences:(id)sender { 
    if (preferencesWc == nil) 
     preferencesWc = [MyPreferencesWindowController getInstance]; 

    [ preferencesWc showWindow:self ]; 
} 

これは、環境設定ウィンドウが一度だけ作成されていることを確認します。 getInstanceを呼び出すと、同じウィンドウのインスタンスが返されます。

関連する問題