Модальный пользовательский лист не закрывается - PullRequest
1 голос
/ 28 августа 2009

Я пытаюсь отобразить пользовательское модальное диалоговое окно и делаю это следующим образом:

EncPasswordSheet имеет тип IBOutlet NSWindow *.

@implementation EncryptionPasswordSheet
-(id)init    
{    
    return self;    
}

- (void)showCustomDlg:(NSWindow *)window
{    
    if (!EncPasswordSheet)    
    {           
        [NSBundle loadNibNamed: @"EncryptionPasswordDlg" owner: self];
    }           
    [NSApp beginSheet:EncPasswordSheet modalForWindow:window modalDelegate:nil didEndSelector:nil contextInfo:nil];    
    [NSApp runModalForWindow: EncPasswordSheet];        
    [NSApp endSheet: EncPasswordSheet];    
    [EncPasswordSheet orderOut: self];      
}

- (IBAction)getPasswordFromSheet:(id)sender
{
    password = [passwordField stringValue];
    [NSApp stopModal];    
}

- (IBAction)cancelEncPasswordSheet:(id)sender    
{       
    password = nil;    
    [NSApp stopModal];        
}

@end

Диалоговое окно отображается и принимает данные. При нажатии «ОК» или «Отмена» выполняются соответствующие методы IBAction, и программа продолжается. Проблема в том, что диалоговое окно не исчезает с пути - то есть оно не закрывается и не исчезает.

Ответы [ 2 ]

4 голосов
/ 28 августа 2009

Вы сняли флажок «Видимо при запуске» в Интерфейсном Разработчике для диалогового окна? Потому что, если я этого не сделаю, то диалоговое окно не отображается как лист и не закрывается, когда закончите. Попробуйте это с вашим оригинальным кодом.

0 голосов
/ 28 августа 2009

Я думаю, вам следует позвонить endSheet с IBActions, вызванных вашими кнопками OK и Отмена, которые, как я полагаю, getPasswordFromSheet и cancelEncPasswordSheet:

- (void)showCustomDlg:(NSWindow *)window {
    if (!EncPasswordSheet) {
        [NSBundle loadNibNamed: @"EncryptionPasswordDlg" owner: self];
    }

    [NSApp beginSheet:EncPasswordSheet
      modalForWindow:window modalDelegate:nil
      didEndSelector:nil contextInfo:nil];
}

- (IBAction)getPasswordFromSheet:(id)sender {
    password = [passwordField stringValue];
    [EncPasswordSheet orderOut: self];
    [NSApp endSheet: EncPasswordSheet];
}

- (IBAction)cancelEncPasswordSheet:(id)sender {
    password = nil;
    [EncPasswordSheet orderOut: self];
    [NSApp endSheet: EncPasswordSheet];
}
...