2009-08-27 47 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