Не забывайте, что если вы пытаетесь запустить это как «модальный» лист (т. Е. Он принимает приложение до тех пор, пока пользователь не отклонит его), вам нужно нажать новый цикл цикла.
Вы сделали лист, а затем не нажали новый цикл, так что ОС просто показывает лист, видит, что нет причин для его работы, и, таким образом, отключает его и возобновляет выполнение на следующем линия:
Я обычно делаю листы следующим образом:
- (id)showPanelModalAgainstWindow: (NSWindow *)window
{
[[NSApplication sharedApplication] beginSheet: panelToShow
modalForWindow: window
modalDelegate: self
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];
[[NSApplication sharedApplication] runModalForWindow: panelToShow];
if (m_returnCode == NSCancelButton) return nil;
}
- (void)sheetDidEnd:(NSWindow *)sheet
returnCode:(int)returnCode
contextInfo:(void *)contextInfo
{
UNUSED(sheet);
UNUSED(contextInfo);
m_returnCode = returnCode;
}
Тогда в вашей принимают и/или кнопку отмены процедуры:
- (IBAction)continueButtonClicked:(id)sender
{
UNUSED(sender);
[[NSApplication sharedApplication] stopModal];
[createAccountWizardPanel orderOut: nil];
[[NSApplication sharedApplication] endSheet: createAccountWizardPanel
returnCode: NSOKButton];
}
Я уверен, что есть, как чуть меньше кода, но я не смотрел на него глубоко, потому что этот способ отлично работает до сих пор ....
Предыдущие комментарии о времени жизни контроллера и объектов панели также релевантные - убедитесь, что вы точно понимаете, какие объекты вам нужны для жизни, когда отображается модальная панель.
Пятно на! Большое спасибо. –