2013-02-04 51 views
0

我正在寫一個MonoMac應用程序,我正在努力BeginSheet。我有許多問題,並將列出它們,希望它們都是一個共同的問題。MonoMac BeginSheet問題

我設法讓我的BeginSheet將我的登錄窗口顯示爲表格,但如果我將應用程序的主界面設置爲應用程序屬性中的MainWindow,而不是MainMenu,則BeginSheet將不執行任何操作。工作表關閉後,我的委託也永遠不會運行。我通過調用Close()來關閉LoginDialogController中的LoginWindow。

這是我在我的MainWindowController使用代碼:

public override void WindowDidLoad() 
{ 
    base.WindowDidLoad(); 

    Dialogs.LoginDialogController loginDialog = new Dialogs.LoginDialogController(); 
    loginDialog.Window.IsVisible = false; 

    NSApplication.SharedApplication.BeginSheet(loginDialog.Window, Window, delegate { 
     // THIS NEVER RUNS 
     mainTabView.SelectAt(1); 
     mainToolbar.SelectedItemIdentifier = "hometoolbaritem"; 
    }); 
} 

在我我用下面的代碼,完全沒有影響其他的觀點之一:

TypeDialogController typeDialog = new TypeDialogController(); 
typeDialog.Window.IsVisible = false; 
// THIS CALL HAS NO EFFECT 
NSApplication.SharedApplication.BeginSheet(typeDialog.Window, View.Window, delegate { 
    // THIS WILL PROBABLY NOT RUN EITHER, EVEN IF THE SHEET SHOWS 
}); 

任何幫助將是讚賞。

回答

0

當您將應用程序主接口切換到MainWindow時,不會調用WindowDidLoad()方法,因爲該方法是MainWindowController的一部分,而不是MainWindow的一部分。

正常事件的順序是這樣的:

  1. MainMenu.xib開始爲應用程序的主界面
  2. MainMenu.xib實例化的AppDelegate
  3. 的AppDelegate FinishedLaunching(NSObject的通知)的委託方法稱爲
  4. FinishedLaunching(NSObject通知)構造一個新的MainWindowController實例,並用它來顯示MainWindow
  5. MainWindowControll呃WindowDidLoad()被調用,您的代碼運行

當您更改主界面是MainWindow.xib文件,這是發生了什麼

  1. 的MainWindow.xib開始爲應用程序的主UI。也就是說,創建了MainWindow的一個實例,但不是控制器來管理它,並且沒有應用程序代理

通過將主界面更改爲MainWindow.xib,我不清楚您要實現的目標。也許如果你解釋你正在努力實現某人可能會提供的幫助。

關於您使用工作表時遇到的問題,您可能未在LoginDialogController中正確關閉工作表。只要調用Window.Close()是不夠的,並會阻止顯示更多的工作表,如您所見。您需要這樣做:

NSApplication.SharedApplication.EndSheet(this.Window); 
this.Window.OrderOut(sender); 
this.Window.Close(); 

您總是需要通過調用EndSheet來平衡對BeginSheet的調用。

如果這不是您的問題,您需要展示如何在LoginDialogController中關閉表單。