问题标签 [nswindowcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6076 浏览

objective-c - 为什么我的工作表没有附加到运行它的窗口?

我有一个包含两个窗口的 NIB,一个是应用程序的主窗口在启动时可见,另一个是自定义工作表(因此在启动时不可见)。当需要工作表时,我的控制器调用:

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

它显示工作表窗口并启动一个模态会话,该窗口有一个标准的 Aqua 标题栏,没有“连接”到主窗口,并且可以像常规窗口一样移动。不用说,这是不可取的:-)。为什么工作表窗口不会“弹出”它运行的窗口,就像工作表通常以这种方式开始时所做的那样?

我想知道我在控制器内部开始工作表这一事实是否-awakeFromNib会产生影响,所以我将工作表移动到稍后可以触发的按钮动作上。这并没有改变行为。我还没有想过要尝试什么。我的目标是 10.5 SDK,使用 Xcode 3.1。

编辑:所以看起来我已经创建了一个模式对话框;工作表和应用程序模式对话框都使用该-beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:方法启动。但是我如何指示我的窗口应该是一个工作表而不是模式对话框?

0 投票
3 回答
5946 浏览

objective-c - 关闭主窗口时关闭 Cocoa 中的子窗口

我是 Cocoa 新手,所以我的方法很可能是错误的,但是..

NSWindowController我有一个应用程序,它使用和打开几个子窗口(在加载主/父窗口之后)initNibWIthName:。这工作正常。

但是当我关闭父窗口(使用红色 x)时,这些窗口仍然打开并阻止应用程序关闭,直到它们也关闭。这是有道理的,因为我不会在任何地方关闭它们。

但是我该怎么做呢?此时必须有一个事件被调用,但我无法在任何地方找到它。

诸如applicationWillTerminate(等等)之类的通知仅在应用程序实际终止时调用,而不是在按下关闭按钮时调用。

我想我正在寻找类似于 WindowsWM_CLOSE类型消息的东西。

0 投票
3 回答
6620 浏览

cocoa - 为什么我必须在 10.5 上调用我的 NSWindowController 上的 showWindow 两次?

我有一个 NSWindowController 的子类,我用它从笔尖加载一个窗口并将其显示在屏幕上。下面是我想显示窗口时调用的代码。在 10.6 上调用 showCustomWindow 时会显示窗口,但在 10.5 上必须调用此方法两次才能显示窗口。

该窗口已选中“启动时可见”,取消选中它似乎没有任何区别。

编辑:我意识到我遇到的问题与我的 NSWindowController 或 showWindow 无关。我已经正确设置了。然而,我确实发现并非所有类都实现了 awakeFromNib。在我的一个 NSView 子类中(在我试图加载的 nib 中),我正在调用 [super awakeFromNib] 这给了我一个“不响应选择器”(但仅在 10.5 上,这很奇怪)。所以,我本可以取出 [super awakeFromNib] 但我选择了希望更强大的:

这使我的笔尖可以正常加载,并且 showWindow 可以正常工作。

0 投票
2 回答
216 浏览

objective-c - TextFields 未加载到 NSWindowController 的子类中

我正在研究第二个首选项样式面板(但首选项与特定文档相关。)我的 myDocument 文件变得有点大,所以我决定尝试使用单独的子类 WindowController 来实现。

我已经继承了 NSWindowController。nib 文件的所有者为 myController。它同时实现了 windowDidLoad 和 awakeFromNib。它有一个 TabView,每个 TabView 有几个 TextField、一个 ComboBox、2 个 TextView 和几个按钮(取消和确定)。正在建立指向 Window、TabViews、Cancel 和 OK 按钮的指针,但指向 comboBox、TextFields 和 TextViews 的指针都为零。

所有的 TextFields、TextViews 和 Buttons 都可以看到该窗口。TabView 正在切换视图。我可以编辑所有的 TextField,但是当我关闭窗口时,我无法初始化它们或从中获取信息。

我正在使用 XCode 3.2 和 Objective-C。

我错过了什么?

艾伦

0 投票
1 回答
606 浏览

cocoa - 关闭文档窗口并打开新窗口,但不关闭文档

我的应用程序是基于文档的,但“文档”包含两个文件夹,而不是一个文件。文档的初始窗口包含几个文件选择器和一个按钮;该操作将关闭该窗口并打开一个新窗口,显示两个文件夹层次结构之间的操作结果。(这两个窗口的大小显着不同;将两个视图都保存在 tables 选项卡视图中并使用它进行切换并非易事。)

这是我的操作方法中关闭文件选择器窗口并打开结果窗口的代码:

(我在尝试解决问题时添加了保留和释放消息。)

我的问题是,尽管我告诉初始窗口控制器不要关闭文档,但在此操作方法完成后文档会被释放和释放。(这是解决问题的又一次失败尝试。)

那么,对于同一个文档,我怎样才能用另一个窗口替换第一个窗口,而不会使文档消失呢?

0 投票
2 回答
1993 浏览

objective-c - 使用 NSWindowController 操作窗口

我有以下代码:

如何使用控制器对窗口 ActivateWindow 进行更改(例如更改窗口上的文本等)?分步说明将不胜感激。谢谢!

0 投票
2 回答
2731 浏览

cocoa - 如何使用 NSWindowController?

我正在寻找使用NSWindowController,我只是想不出如何让它工作。我该如何开始使用它?

0 投票
2 回答
1032 浏览

cocoa - 基于 Cocoa 文档的应用程序中的 MVC

我目前正在对我的应用程序进行重构和重组。我已经意识到模型和视图之间的一些分离,以及它们的控制器已经减少,我希望做一些清理工作。

我的应用程序中使用了几个关键类:NSPersistentDocument、NSWindowController 和一个模型类。

NSPersistentDocument 类充当“模型控制器”;它拥有模型类的一个实例,并管理与模型的所有交互。

NSWindowController 类充当“视图控制器”;它拥有主窗口,并管理主窗口中视图的交互。此类也是定义 Window 的 nib 文件的文件所有者。

我在这里看到的问题是我没有真正的“控制器”。我目前的设计迫使模型控制器和视图控制器相互了解。两者之间没有冥想对象,因此,我的模型和视图没有明确分离,这使得支持多个视图或模型成为一个问题。

我想将两个现有控制器的功能移动到一个新的“控制器”类中,该类将充当模型控制器和视图控制器之间的控制器。最后,这仍然只是 MVC 设计模式,只是多了一点结构。

但是,我很难弄清楚这将如何适应 Cocoa 的基于文档的应用程序架构。

我最大的问题是在哪里以及如何创建这个新的控制器对象?这如何适应 Cocoa 的架构?我是否在与 Cocoa 的架构作斗争,有没有更好的方法来做到这一点?

谢谢。

0 投票
1 回答
748 浏览

objective-c - 什么时候应该扩展 NSDocument,什么时候应该扩展 NSWindowController?

我有一个包含项目列表的主窗口的应用程序,并且可以从该窗口打开不确定数量的窗口。这些窗口中的每一个都可以包含模型对象的多个实例,这些实例列在抽屉中。

我通过使(主窗口)项目列表扩展 NSDocument 并且每个其他窗口扩展 NSWindowController 来开始我的项目。但是从功能上讲,主窗口每个蓝月亮都会使用一次,尽管它是用户启动应用程序时应该弹出的窗口,并且扩展 NSWindowController 的窗口是用户广泛使用的窗口,也是最终持有的窗口我的“文件”。

正因为如此,我现在在实现诸如新建、打开和保存等方法时遇到了问题——我发现自己编写了很多手册上说应该由超类实现的代码。

因为我正处于十字路口,所以我想知道我应该如何实现我的应用程序。我应该将我的主窗口重新分解为一个扩展 NSWindowController 的类并从包含主菜单的 xib 启动它,还是应该保持原样并覆盖 newDocument、openDocument 等以获得所需的功能?


只是为了帮助心理形象,我的应用程序像 MSN 一样工作 - 我有一个主列表,上面有几个项目(MSN 上的联系人列表),当我双击一个项目时我打开一个窗口(你打开一个聊天到用户)。我的应用程序更进一步,为每个“聊天”窗口保留了模型对象的多个实例,并且每个实例都可以通过抽屉中的表格访问。

0 投票
2 回答
293 浏览

cocoa - Cocoa:插件无法打开应用程序窗口

我正在为OsiriX开发一个插件。

在那个应用程序中,我有 3-4 个 nib 文件。此外,对于插件,还有名为 PluginFilter 的文件(.h 和 .m),其中存在名为 - (long) filterImage:(NSString) menuName 的方法,插件从该方法开始执行。现在我的问题是,我已经返回启动主窗口的代码在其他一些 .m 文件中,我必须使用上述方法调用该文件。

该应用程序有多个 nib 文件。我有一个插件名称 PluginFilter 调用:

当被这个方法调用时,插件应该打开一个窗口。定义窗口控制器的代码在另一个 nib 中。filterimage当我在插件中调用该方法时,该窗口永远不会出现。

这是我的filterImage:方法。

调用该方法不会产生警告或错误,窗口根本不会出现。