问题标签 [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 投票
1 回答
4872 浏览

objective-c - NSWindowController: loadWindow 从 nib 加载窗口但 showWindow: 什么也不做

我有一个_PreferencesWindowController使用以下实现调用的 NSWindowController 子类 -

我尝试_PreferencesWindowController使用以下代码显示窗口 -

它什么也不做,我检查_preferencesWindowController.window的是nil调试器。

loadView但是,如果我调用_preferencesWindowController窗口可以加载并且是可见的;_preferencesWindowController.window不再是零值 -

我查看了 Apple 在 NSWindowController 上的文档,它明确表示“您永远不应该直接调用loadWindow”,而showWindow:应该使用它。我想知道我可能错过了什么导致我看到的上述行为。

0 投票
2 回答
9238 浏览

cocoa - NSWindowController 澄清理解

我曾多次在项目中使用过 NSWindowController,感觉我(非常)粗略地掌握了这个重要类背后的概念。我想用这篇文章来澄清/纠正我自己的理解,并希望能帮助其他学习者迈出理解的第一步。这是我发现最有用的一目了然的概念、概述和最佳实践,但文档中经常缺少这些内容。这是我对 NSWindowController 的看法(问题以粗体散布):

  • NSWindowController (NSWC) 子类(概念上)存在于每个窗口 nib 下方,充当用户界面元素和它们控制/表示的模型对象之间的粘合剂。基本上,应用程序中的每个窗口都应该有自己的 NSWC 子类。
  • nib 的文件所有者应始终是 NSWC 子类。MainMenu.xib 应用程序也是这样吗?
  • NSWCwindow属性应始终链接到 InterfaceBuilder 中的 NSWindow。
  • 您应该使用 覆盖“init”方法,[super initWithWindowNibName:]以便在您引用[mycontroller window]它时加载笔尖。MainMenu.xib 窗口的 NSWC 是否也应如此,即使它是在启动时打开的?
  • NSWC 不应该做太多繁重的工作——它应该简单地将消息传递给对象实例,并在 UI 中呈现这些对象。
  • 它可以使用绑定来修改 UI,或者充当表的委托等,或者通过在观察到更改时主动更改 UI 元素,或者以上任何一种的组合(您使用哪个似乎是一个问题味道,各方面都有利弊)。
  • NSWC 可以在必要时创建其他 NSWC 的实例(例如,当打开一次性子窗口时)。
  • 使用[mycontroller showWindow:nil]可在前面显示关联的窗口。如果您希望窗口显示为工作表,请使用以下内容:

    /li>

didEndSelector:应该是父窗口的NSWC的一个方法,可以通过[sheet windowController]. - 关闭窗口调用performClose:NSWC 的窗口的方法。

一些问题:

  • MainMenu 窗口的 NSWC 也应该是应用程序委托,还是应该是不同的类?
  • 同样,主要 NSWC 应该处理文件(拖放和打开),还是应该将其传递给应用程序委托,或者这只是一个品味问题?

如果这是不好的做法,或者完全是错误的,请纠正我。我希望澄清我对 NSWindowController 的理解,因此任何补充(以最佳实践、经验、陷阱的形式)都将受到高度赞赏。

谢谢,劳里

0 投票
1 回答
1178 浏览

cocoa - 可可将背景窗口发送到前面

在这篇文章的底部,我包含了一个包含我的代码的示例项目。我有一个使用主默认窗口的 Cocoa 应用程序,以及我创建的另一个窗口 nib。当程序启动时,我希望它加载窗口笔尖并将其显示在默认的“MainMenu”笔尖窗口前面。我怎样才能做到这一点?我试过下面的代码,但窗口仍然显示在默认窗口后面:

这是从 调用的AppController,这是我添加到 MainMenu 笔尖的一个类。InfoWindowController 子类NSWindowController。我在这里包含了一个示例项目

0 投票
1 回答
243 浏览

objective-c - NSWindowController 是否应该始终是窗口控制器的超类?

在阅读 Apple 的 Cocoa 教程时,窗口控制器只是一个普通类,虽然我认为这很好,但继承 NSWindowController 不是更好吗?

如果我做对了,NSWindowController 是一个便利类,它已经具有实现窗口控制器所需的许多功能,对吗?

你有什么理由不使用这个类吗?

0 投票
2 回答
2489 浏览

objective-c - 无法设置 NSWindow 的位置

我有一个扩展 NSWindowController 的类,我试图定位它控制的窗口。该窗口正确显示了所有预期的内容和功能,但是当我尝试在 initWithWindowNibName 方法中将其起始位置定位在屏幕上时,该位置不会改变。这是代码:

这看起来很简单,我不确定问题是什么。

感谢您的任何想法。

(发现问题。我没有将窗口连接到 IB 中的类。)

0 投票
1 回答
565 浏览

objective-c - 在 IB 中创建的 NSWindow 不会在应用程序中模态显示

我有一个应用程序,当按下按钮时它应该显示一个模式窗口。我对此有一些疑问,但我将把它缩小到让我头疼的地方。

我想补充一点,当应用于这种特殊情况时,我已经在做类似的事情了。我已经做的是模态显示一个 NSOpenPanel。这是它的代码。

此代码位于 appDelegate 内。

现在我正在尝试做的事情是行不通的

我创建了一个 xib 文件,该文件具有一个类似于 NSPanel 的 HUD 窗口(它在 IB 中的命名方式)。我创建了一个监听按钮(testButton)的windowcotroller。这是代码:

我将 xib 文件的文件所有者设置为 BrowserWindowController 类,并将按钮与 testbutton 链接。

单击按钮时返回 appDelegate 我想以模态方式显示此面板。这是代码:

我在 API 中看不到任何功能,例如 NSOpenPanel 以模态方式显示此窗口。

感谢任何可能回答的人。

0 投票
1 回答
4410 浏览

cocoa - 如何显示从 xib 加载的工作表?(MacOSx)

我有一个 xib 文件,其中只有一个 NSPanel,我试图将此面板显示为模式表(带有beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:)。此 xib 的文件所有者是一个控制器类“MyController”,它具有到 NSPanel 的 IBOutlet。

我正在寻找的是这样的:

问题:MyController 必须继承自NSWindowControllerorNSObject吗?我试过了NSWindowControllerinitWithWindowNibName:但出口NSPanel总是为零。

谢谢

0 投票
1 回答
15399 浏览

cocoa - 如何在 NSWindow 关闭时收到通知

我怎样才能注意到 NSWindow 应该或将要关闭?我想要类似windowWillClose 的东西。不幸的是,NSWindowController 没有 UIViewController 那样方便的方法,例如。那么这样做的最佳做法是什么?

谢谢
-f

0 投票
0 回答
825 浏览

objective-c - 从状态菜单显示新窗口

可能重复:
来自应用程序的新 NSWindow - 不可能完成任务?

我到底如何才能显示新窗口 - 从我的状态菜单应用程序?我有状态菜单应用程序和方法调用

单击状态菜单项后,我想打开新窗口。我已经创建了一个新窗口作为一个新的 xib 文件 - 名为“Preferences.xib”,通过控制器连接到对象窗口。新窗口在启动时必须不可见 - 所以我未选中选项:在启动时可见,bcz 我想在单击状态菜单中的项目后显示它。我创建了窗口控制器:

然后执行初始化:

然后我在 mainAppDeleage 的初始化中创建了窗口:

并且在

请问有什么建议吗?经过 4 天的谷歌搜索和不成功的尝试后,我感到绝望:-(谢谢。我是一个 Objective-c 新手。

0 投票
3 回答
1971 浏览

objective-c - 来自应用程序的新 NSWindow - 不可能完成的任务?

好的,我做错了什么?
1.创建cocoa app和appDelegate命名:window2AppDelegate
2.window2AppDelegate.h


3. 在 xib 编辑器中,窗口连接到窗口控制器 - 设置为 appdelegate,buttonclick 动作到按钮
4,创建


5. 创建名为 PrefWindow 窗口 IBOutlet 的新 xib 文件,从其控制器连接到窗口(也将控制器设置为 PrefWindowController) 选项“启动时可见”未选中!我想在 buttonclick 上看到这个窗口。
6.实现window2AppDelegate


7. 在我构建并运行应用程序后:closebutton 关闭应用程序但 buttonclick - 不会显示 PrefWindow!?为什么和我做错了什么?不要告诉我在可可objective-c 中显示其他窗口比在“愚蠢的”Java 或C# 中更困难?