1

我有一個NSWindow(mainwindow)爲我的OSX NSApplicationDelegate。 NSWindow還擁有多個使用NSViewControllers設置內容的NSView。目前我遇到了一個問題,當我想要一個NSPanel,一張表,從我的一個NSViews的頂部(而不是從我的應用程序的頂部)下拉。我想用代碼:如何識別modalForWindow使用NSViewController

[NSApp beginSheet:self.loginSheet.window 
     modalForWindow:self.view.window 
     modalDelegate:self 
     didEndSelector:nil 
      contextInfo:nil]; 

的loginSheet是NSWindowController的子類加載使用XIB文件:

loginSheet = [[sheetWindowController alloc] initWithWindowNibName:@"loginSheet"]; 

不過,我從我的NSViewController和我self.view運行這段代碼。窗口總是零。我的NSView似乎以其他方式正確初始化並且工作正常,但由於我的modalForwindow(self.view.window)爲零,工作表下拉不起作用。如果我使用的代碼:

[NSApp beginSheet:self.loginSheet.window 
     modalForWindow:[[NSApplication sharedApplication] mainWindow] 
     modalDelegate:self 
     didEndSelector:nil 
      contextInfo:nil]; 

它的作品就像一個魅力。但是,從我所有的尋找問題的答案看來,這種工作方式似乎是一個很大的禁忌,因爲它阻止了整個應用程序的響應。我想我的工作表被鏈接到我的一個NSViews「但我不明白我該怎麼做,因爲該應用程序只有一個NSWindow?我是不是在做一些讓我的self.view.window保持零的東西?有沒有一種方法可以讓我找到自定義視圖的父窗口?如果您對如何解決此問題有任何建議,或者可以給我提示我所做的錯誤,我將不勝感激。

謝謝!歡呼聲,Trond

回答

2

您應該看看「介紹表格」文檔的「定位表」部分。它解釋瞭如何使窗體出現在使用窗口的窗口標題欄之下的其他地方:willPositionSheet:usingRect:

+0

感謝您指點我正確的方向!我得到這個很好的工作,但我必須使用[[NSApplication sharedApplication] mainWindow]來識別我的窗口。 –