Как я могу отслеживать открытие и закрытие события NSWindow? - PullRequest
9 голосов
/ 18 августа 2010

Я попробовал – windowDidExpose:, но это не сработало. Что я должен попробовать для этого?

Мое окно - служебное окно.

- изменить для большей ясности -

Что я хочу:

viewWillAppear viewWillDisappear viewDidLoad viewDidUnload

в Какао Touch.

Ответы [ 4 ]

5 голосов
/ 11 октября 2013

Очень старый вопрос, но только для целей документации:


Трек открыт: В вашем контроллере Windows переопределите метод:

-(void)showWindow:(id)sender
{
    //add this for track the window close
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(windowWillClose)
                                                 name:NSWindowWillCloseNotification
                                               object:nil];
    [super showWindow:sender];
    //do here what you want...
}

Закрыть трек: Реализуем метод

-(void)windowWillClose
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    //do here what you want...
}
4 голосов
/ 19 августа 2010

Существует windowDidClose:, но это, вероятно, относится только к закрытию;если вы отправляете в свое окно сообщение orderOut:, я не думаю, что это имеет значение.

Вам, вероятно, нужно либо просто отслеживать его из любого кода, из которого вы заказываете окно, либоподкласс класса окна и методы переопределения, такие как makeKeyAndOrderFront: и orderOut: (что бы вы ни использовали), чтобы публиковать пользовательские уведомления перед вызовом до super.

1 голос
/ 01 августа 2016

Для Swift

Track open : В вашем контроллере Windows переопределите метод:

override func showWindow(sender: AnyObject?) {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(windowWillClose), name: NSWindowWillCloseNotification, object: nil)
    }

Закрыть дорожку : реализовать метод:

func windowWillClose() -> Void {

        NSNotificationCenter.defaultCenter().removeObserver(self);
        //Do here what you want..
    }
0 голосов
/ 23 апреля 2013

Я придумал хак для борьбы с этим. Нет уведомления о том, что сигнализирует о том, что окно было выведено на экран, но есть уведомление, которое гарантированно будет отправлено при выводе окна на экран. Я говорю о NSWindowDidUpdateNotification, что означает, что окно обновилось само по себе.

Конечно, это не только отправляется, когда окно появляется - оно отправляется каждый раз, когда окно обновляется. Излишне говорить, что это уведомление отправляется лот более одного раза. Таким образом, вы хотите следить за ним в первый раз, делать свое дело и игнорировать любые последующие уведомления. В моем случае я хотел добавить лист к окну, который позже будет заказан другой частью моего приложения. Поэтому я сделал что-то вроде этого:

__block id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSWindowDidUpdateNotification object:window queue:nil usingBlock:^(NSNotification *note) {
    [self showSetupSheet];
    [NSNotificationCenter.defaultCenter removeObserver:observer];
}];

Нет особой причины, по которой вам нужно было бы использовать наблюдателя на основе блоков - наблюдатель на основе методов будет работать так же хорошо.

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