NSApplication endSheet: не имеет никакого эффекта - PullRequest
13 голосов
/ 26 августа 2010

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

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

-(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 и убедившись, что window и loginWindow присутствуют и находятся в нормальном состоянии.

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

Ответы [ 2 ]

19 голосов
/ 26 августа 2010

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

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

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

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

[sheet orderOut:self];

, что приведет к отклонению листа.

3 голосов
/ 01 августа 2014

См .: Создание модального диалога или окна в Какао Objective-c?

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

[NSApp endSheet: loginWindow];
[loginWindow orderOut:self];
...