53

我有一个基于文档的核心数据应用程序。主文档窗口有许多视图,每个视图都由其自己的自定义控制,这些视图NSViewController根据需要进行切换。我希望这些视图控制器中的每一个都能够从文档窗口中下拉自定义模式表。但是,因为视图是单独的而不是MyDocument nib在 IB 中,所以我无法将视图链接到文档窗口。这意味着当我打电话时

[NSApp beginSheet: sheetWindow modalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) contextInfo: nil];

我提供 nil ,mainWindow因此该表看起来是分离的。

有什么建议么?

非常感谢

4

5 回答 5

115

您可以使用[[self view] window]

于 2011-04-19T03:47:29.200 回答
41

确实,它是self.view.window(斯威夫特)。

这在 viewDidLoad() 和 viewWillAppear() 中可能为 nil,但在您到达 viewDidAppear() 时已正确设置。

于 2016-11-03T14:59:36.110 回答
2

其他答案的一个问题(即,只看self.view.window)是他们没有考虑到当视图被隐藏时,其window属性将为nil. 一个视图可能由于很多原因被隐藏(例如,它可能位于选项卡视图中的未选择视图之一中)。

以下(swift)扩展将通过提升视图控制器层次结构来提供windowControllerfor a ,然后可以从中检查属性:NSViewControllerwindow

public extension NSViewController {
    /// Returns the window controller associated with this view controller
    var windowController: NSWindowController? {
        return ((self.isViewLoaded == false ? nil : self.view)?.window?.windowController)
            ?? self.parent?.windowController // fallback to the parent; hidden views like those in NSTabView don't have a window
    }

}
于 2019-04-01T14:11:01.397 回答
1

如果您的控制器可以访问NSDocument子类,则可以使用-windowForSheet

于 2011-04-19T15:17:10.450 回答
0

更多关于 Tim Closs 的回答:

-(void)viewDidAppear
{
    self.view.window.title = @"title-viewDidAppear"; //this only works when and after viewDidAppeer is called
}
-(void)viewWillDisappear
{
    self.view.window.title = @"title-viewWillDisappear"; //this only works before and when viewWillDisappear is called
}
于 2018-12-11T12:39:14.270 回答