是否可以更改 NSPopover 窗口的行为和属性?

问题描述 投票:0回答:1

我有一个 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
委托方法中操作这个窗口对象(在它显示之后,在它分离之后等),但没有成功——它只是忽略了我对它所做的一切。经过一些修改后调用它,如果我“得到”它的当前状态 - 我看到它没有改变。我的电话没有被接通。

现在我的问题:

有没有办法强迫它按照我想要的方式“行为”?

  1. 我想要调整大小。
  2. 我希望它成为“关键”,并且它的一些元素/控件成为第一响应者。例如。视图内的文本字段无法编辑,拒绝键盘命令(用于复制/粘贴/全选)

我没有创建这个窗口,并且我的代码中没有任何地方确定它的类。这是 NSPopover(或者可能是 NSPopoverController)做的事情。

我的代码是 Obj-C,但我认为这在这里并不重要。

任何想法将不胜感激。

objective-c macos cocoa
1个回答
0
投票

听起来您需要实现

-[NSPopoverDelegate detachableWindowForPopover:]
并提供您想要的类型的窗口。

© www.soinside.com 2019 - 2024. All rights reserved.