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];
который отклонит лист.
Ответ 2
Смотрите: Создание модального диалога или окна в Cocoa Objective-c?
Делегат не требуется. Следующее работает, чтобы я уволил и позвонил ему позже:
[NSApp endSheet: loginWindow];
[loginWindow orderOut:self];