1
chenluois 2011-11-21 10:57:26 +08:00
居然没有人回答,那么我来答好了。
你的第一个问题: 首先,在你的 PreferenceController.m 的 init 里这样写 - (id)init { if (![super initWithWindowNibName:@"Preference"]) { return nil; } return self; } 其次,执行 action 显示窗口的时候就不要再用 initWithWindowNibName 了 if (!preferenceController) { preferenceController = [[PreferenceController alloc] init]; } [preferenceController showWindow:self]; 最后,别忘了把 Preference.xib 的 File's Owner 的 Class 设置为 PreferenceController 这样设置下来,你的第二个问题也应该解决了。 再说你的第三个疑问: 为什么把 NSPanel 的 style 设为 Utility Panel 就可以让这个窗口一直显示在前台。这实际上就相当于加了一个 NSFloatingWindowLevel 的属性。 Level 这个概念有点儿类似图层,不同种类的窗口在不同的层上。一般窗口处于 NSNormalWindowLevel。NSFloatingWindowLevel 在 NSNormalWindowLevel 的上层。Dock 栏处于 NSDockWindowLevel,又在 NSFloatingWindowLevel 的上层。 一共有10个不同的层级: NSNormalWindowLevel NSFloatingWindowLevel NSSubmenuWindowLevel NSTornOffMenuWindowLevel NSMainMenuWindowLevel NSStatusWindowLevel NSModalPanelWindowLevel NSPopUpMenuWindowLevel NSScreenSaverWindowLevel NSDockWindowLevel 不设置 style 一样可以达到这样的效果,对任意一种类型的窗口应用 setLevel 方法即可,如: [window setLevel:NSFloatingWindowLevel]; |
2
keakon OP @chenluois 谢谢解答
第一个感觉执行的逻辑也没变,回家试试有什么不同吧…我怀疑是不是要用NSBundle + loadNibNamed:owner: 第二个我设置了File's Owner的Class,应该不是这个的问题。 第三个其实不是问题,只是我的窗口老不跑到前台来,才这样做的=。= |
3
chenluois 2011-11-21 13:11:22 +08:00
虽然开头你已经说了 “我在IB中把一个NSWindow绑定到NSWindowController的window outlet上”,但我建议你回家后最好再检查确认下 window outlet 是否真的连接到了那个 NSWindow. :)
|