Как показать NSPanel листом

Используйте ИДЕЯ IntelliJ IDE от JetBrains - создатель ReSharper. "Это не похоже на resharper" - это - оригинал, и resharper похож на это для C#.

7
задан Anoop Vaidya 12 May 2013 в 08:26
поделиться

3 ответа

Звучит как классический случай установки флажка «Видимость при запуске» для панели в IB. Выключи это.

16
ответ дан 6 December 2019 в 10:01
поделиться

Да, вам необходимо владеть этим контроллером, пока вы хотите, чтобы он продолжал работать. Вы не можете просто создать его, автоматически выпустить и позволить ему умереть - вам нужно удерживать его столько, сколько вам нужно.

2
ответ дан 6 December 2019 в 10:01
поделиться

Не забывайте, что если вы пытаетесь запустить это как «модальный» лист (т. Е. Он принимает приложение до тех пор, пока пользователь его не закроет), вам нужно будет нажать новый цикл выполнения.

То, что вы сделали, отображается листом, а затем не запускает новый цикл, поэтому ОС просто показывает лист, видит, что нет причин для его продолжения, и, таким образом, закрывает его и возобновляет выполнение на следующей строке. :

Обычно я делаю листы следующим образом:

- (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];

}

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

1
ответ дан 6 December 2019 в 10:01
поделиться