Как открыть только одно окно «Настройки»? - PullRequest
1 голос
/ 21 сентября 2011

Мое приложение имеет окно настроек. Я открываю его, используя этот код

- (IBAction)openPreferences:(id)sender {

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

Если нажать команду , снова-снова и снова, новое окно предпочтений будет открыто снова-снова и снова ...

Как открыть только одно окно? Спасибо!

Ответы [ 2 ]

6 голосов
/ 21 сентября 2011

Сделайте windowController переменной экземпляра вашего AppDelegate и измените ваши открытые настройки на

- (IBAction)openPreferences:(id)sender
{
    if( windowController == nil )
        windowController = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"];
    [windowController showWindow:sender];
}
0 голосов
/ 11 декабря 2013

Так вот как я это решил ... У меня есть класс "MyPreferencesWindowController", который имеет метод с именем getInstance. Этот метод вызывается, когда вы хотите получить окно настроек. Это решение использует преимущества одноэлементной технологии.

/**
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;
}

Теперь в классе Document, когда вы хотите показать окно настроек, выполните следующие действия:

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

    [ preferencesWc showWindow:self ];
}

Это обеспечит создание окна настроек только один раз. И тогда каждый вызов getInstance будет возвращать один и тот же экземпляр окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...