我有一个 NSPopover,它从菜单栏应用程序中的 NSStatusItem 打开。 这个 NSPopover(瞬态)可以被撕掉,然后它看起来就像一个浮动窗口/面板。弹出窗口显示一个在普通 .xib 文件中定义并附加到弹出窗口的视图
我可以像这样从 NSPopover 获取底层窗口对象:
NSWindow *statusWindow = [self.statusIconView window]; // hopefully the detached window?
其中
self.statusIconView
是附加到 Popover 控制器的视图。
statusWindow 看起来像一个普通的 NSWindow - 但任何更改其属性的尝试(例如我试图使其可调整大小)都会被忽略。
我尝试在调试器中检查它 - 发现它的类很特殊:
NSPopoeverWindow : NSPanel : NSWindow
意思 - 它是 NSPanel 的一个特殊子类,而 NSPanel 又是 NSWindow 的子类。我怀疑这个特殊的类会覆盖并忽略 NSWindow 的大部分功能和行为。
我尝试在许多
NSPopover
委托方法中操作这个窗口对象(在它显示之后,在它分离之后等),但没有成功——它只是忽略了我对它所做的一切。经过一些修改后调用它,如果我“得到”它的当前状态 - 我看到它没有改变。我的电话没有被接通。
现在我的问题:
有没有办法强迫它按照我想要的方式“行为”?
我没有创建这个窗口,并且我的代码中没有任何地方确定它的类。这是 NSPopover(或者可能是 NSPopoverController)做的事情。
我的代码是 Obj-C,但我认为这在这里并不重要。
任何想法将不胜感激。
听起来您需要实现
-[NSPopoverDelegate detachableWindowForPopover:]
并提供您想要的类型的窗口。