我正在编写一个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 :(得分:0)
当您将应用程序主界面切换到MainWindow时,不会调用WindowDidLoad()方法,因为该方法是MainWindowController的一部分,而不是MainWindow。
正常的事件序列是这样的:
当您将主界面更改为MainWindow.xib时,会发生这种情况
通过将主界面更改为MainWindow.xib,我不清楚您要实现的目标。也许如果你解释一下你想要达到的目标,也许有人可以提供帮助。
关于您使用工作表遇到的问题,您似乎没有在LoginDialogController中正确关闭工作表。只是调用Window.Close()是不够的,并且会阻止显示更多的工作表,如您所见。你需要做这样的事情:
NSApplication.SharedApplication.EndSheet(this.Window);
this.Window.OrderOut(sender);
this.Window.Close();
您始终需要通过调用EndSheet来平衡对BeginSheet的调用。
如果这不是您的问题,您需要在LoginDialogController中显示如何关闭工作表。