2009-08-27 52 views
1

我想显示自定义模式对话框,并做了以下方法:模态定制表不打烊

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 

正在显示对话框并接受输入。在按下“ok”或“cancel”时,相应的IBAction方法正在执行并且程序继续。问题在于对话框并未避开 - 即没有关闭或消失。

+0

您可能需要重新格式化代码以使其更易于理解。用四个空格缩进来将一些文本格式化为代码。 – jergason 2009-08-27 22:06:07

回答

0

我想你应该叫由你确定叫IBActions endSheet和取消按钮,我以为是getPasswordFromSheetcancelEncPasswordSheet

- (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]; 
} 
+0

感谢Olbaum的回复。我尝试了你的方法,但没有成功。问题是我必须使用“runModelForWindow”才能停止程序执行,直到用户输入并按下ok或取消。 – King 2009-08-27 22:28:13

+0

你说得对,对不起。请忽略此答案并查看我的新答案。 – 2009-08-28 00:08:25

4

你有没有选中“可见在启动”在Interface Builder的对话窗口?因为如果我不这样做,那么对话框就不会作为工作表应用,并且在完成时不关闭。试试你的原始代码。

+0

你试过这个伎俩,但也没有工作。无论如何感谢您的答复。 – King 2009-08-28 21:34:13

+0

这很奇怪,因为我做了一个测试项目并使其工作。你的对话框实际上是否显示为从主窗口向下滑动的表单?你如何调用showCustomDlg:?你通过什么窗口? – 2009-08-28 23:46:38

+0

我只是偶然发现了这个答案,它拯救了我的生命。我花了2天的时间试图找出为什么我的模态对话框不是打开像一张纸,而是一个窗口......愚蠢的“发射时可见”+1为您的好先生! – Bot 2013-03-09 20:18:47