我正在写一个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
});任何帮助都将不胜感激。
发布于 2013-02-05 22:23:29
将应用程序主接口切换到MainWindow时,不会调用WindowDidLoad()方法,因为该方法是MainWindowController的一部分,而不是MainWindow的一部分。
正常的事件顺序是这样的:
在应用程序的主UI
当您将主界面更改为MainWindow.xib时,会发生以下情况
我不清楚您试图通过将主界面更改为MainWindow.xib来实现什么。也许,如果你解释一下你正在努力实现的目标,也许有人能帮上忙。
关于工作表的问题,很可能是您没有在LoginDialogController中正确关闭工作表。如您所见,仅仅调用Window.Close()是不够的,而且还会阻止显示更多的工作表。你需要这样做:
NSApplication.SharedApplication.EndSheet(this.Window);
this.Window.OrderOut(sender);
this.Window.Close();您总是需要在对BeginSheet的调用和对EndSheet的调用之间取得平衡。
如果这不是您的问题,那么您需要展示如何在LoginDialogController中关闭工作表。
https://stackoverflow.com/questions/14693470
复制相似问题