Не могу открыть лист в окне дважды - PullRequest
0 голосов
/ 12 января 2011

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

- (IBAction) showSpeedSheet:(id)sender
{

 [NSApp beginSheet:addEditPackagePanel
    modalForWindow:[[NSApp delegate] window]
  modalDelegate:nil
    didEndSelector:nil
    contextInfo:nil];

}

-(IBAction)endSpeedSheet:(id)sender
{

 [NSApp endSheet:addEditPackagePanel];
 [addEditPackagePanel orderOut:sender];


}

Я не могу найти, что не так, приложение не печатает никаких ошибок в журнале.

Ответы [ 2 ]

4 голосов
/ 09 июля 2012

Делегат не требуется.

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

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

[NSApp endSheet:[windowController window]];
[windowController close];

С этими шагами последующие листы могут отображаться без звукового сигнала.

0 голосов
/ 12 января 2011

Я думаю, вам может понадобиться реализовать модальный делегат и didEndSelector. Вызвать orderOut следует из селектора did-end.

[NSApp beginSheet:addEditPackagePanel
 modalForWindow:[[NSApp delegate] window]
 modalDelegate: self
 didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
 contextInfo: nil];

и

- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void*)contextInfo
{
    [sheet orderOut:self];
}

Я полагаю, что управление отправляется селектору did-end сразу после вызова endSheet.

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