NSApplication endSheet: не действует

Хорошо, это действительно меня утомляет:

Я создаю модальный лист в окне как

-(IBAction) login: (id) sender {
[NSApp beginSheet:loginWindow 
   modalForWindow:window 
    modalDelegate:nil 
   didEndSelector:nil 
      contextInfo:nil];
}

и попробуйте удалить его с помощью

-(IBAction) loginWindowCancelPressed:   (id) sender {
debugLog(@"cancel");
[NSApp endSheet:loginWindow];
}

но он остается.

Я проверил все очевидные вещи, такие как соединения IB, и убедитесь, что окно и loginWindow присутствуют и находятся в нормальном состоянии.

Итак, вопрос: я что-то упустил?

Ответы

Ответ 1

Вам нужно создать делегат для листа. Делегат должен реализовать метод с сигнатурой, подобной следующей:

- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;

(Вы можете использовать другое имя, если хотите, но оно должно принимать те же параметры.)

Вы можете делать все, что вам нужно сделать в этом методе, но в конечном итоге это должно закончиться:

[sheet orderOut:self];

который отклонит лист.