问题标签 [nspopover]

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 回答
2120 浏览

cocoa - 如何处理急救人员和 NSPopover

我正在尝试复制 iTunes 中搜索字段的行为,以查找股票代码和名称。具体来说,当您开始在搜索字段中输入时,会出现一个带有过滤项目的弹出框。在大多数情况下,我有这个工作但是我无法复制的是它处理第一响应者的方式 在此处输入图像描述

输入三个字符后,我的弹出框出现了。此时 NSSearchField 将失去第一响应者状态,因此我无法继续输入。我想要的行为是能够在弹出窗口出现后继续输入,如果使用箭头键滚动项目,然后继续输入,您将从搜索字段中的最后一个字符继续。

我尝试的是继承 NSTextView(将其用作 NSSearchField 的自定义字段编辑器)并覆盖

通过简单地返回 NO,我可以在弹出框出现后继续输入,但显然我无法选择弹出框中的任何项目。所以我尝试了以下方法,如果发生向下箭头或 mousedown 事件,则返回 YES。

这适用于 mousedown 事件,但不适用于 keydown 事件,此外,当用户继续键入时,这并不能解决问题。

有什么建议么?

0 投票
1 回答
303 浏览

macos - 在来自 NSStatusItem 的 NSPopover 中未启用 NSTextField

This question is answer Not able to edit NSTextField on NSPopover even if Editable behavior is set,但因为 StackOverflow 不允许您发表评论,除非您有一定的声誉,我不得不创建另一个线程。我完全按照答案中的解释做了,没有运气。这是使用 Xcode 5 的 10.9。我将 NSWindow+CanBecomeKeyWindow.m 添加到构建设置中。因为这是一个只有状态栏的应用程序,所以我在 plist 中将 Application is Agent 设置为 YES 并且没有使用应用程序中的任何窗口。任何想法如何与小牛队实现这一点?

0 投票
4 回答
2148 浏览

macos - 使用 NSTokenField 强制 NSPopover 不成为第一响应者

我有一个 NSTokenField 并且我在弹出框内提供了一个自定义的自动完成功能。不幸的是,一旦显示弹出框,它就会强制 NSTokenField 辞职第一响应者。有没有办法显示弹出窗口但不松开 NSTokenField 上的第一响应者?

覆盖 NSTokenField 的 resignFirstResponder 会导致 NSTokenField 停止工作(它不接受任何击键)。覆盖 NSPopover 的 acceptFirstResponder 方法或按照此问题中的建议设置其行为也不起作用。

编辑:NSTokenField 不在 NSPopover 的 contentViewController.view 中。Edit2:Mailapp 中的搜索栏等行为将是最佳解决方案。 邮件应用程序

弹出框

0 投票
2 回答
1343 浏览

objective-c - 显示没有焦点的 NSPopover

我正在创建一个 IntelliSense 样式的弹出框,它向正在输入文本字段的用户显示什么语法是有效的。有谁知道如何在不给它焦点的情况下显示 NSPopover,以便用户可以继续输入文本字段?弹出框由 controlTextDidChange 触发:

0 投票
2 回答
1207 浏览

macos - NSPopover 中的 NSView:转换坐标

语境

让我们P成为一个 NSPopover 并view成为一个 NSView ,它是一个包含在P.

我需要的

我想获取框架view并将其转换为屏幕的坐标系。通常,您会这样做:

但是,因为view是在一个 NSPopover 中,所以它的window属性是 nil 并且上面的方法会返回 NSZeroRect: [0, 0, 0, 0]

那么,如果视图位于 NSPopover 中,如何在屏幕坐标中获取视图的框架?

笔记:

  1. NSPopover 在屏幕上并且可见。
  2. 我试图将其框架转换为屏幕坐标的视图不是 NSPopover 或其 contentView 的直接子视图。有问题的视图实际上是 NSClipView 中的 NSScrollView 中的 NSTableView 中的 NSTableCellView 中的自定义 NSView。clipView 是 NSPopover 的 contentView 的直接子视图。
  3. 在普通的 NSWindow 中,您可以获取任何子视图并调用[self window]以获取包含的 NSWindow 对象。然而,在弹出窗口中这样做会返回 nil。
0 投票
1 回答
1543 浏览

objective-c - contentViewController ((null)) 或 contentViewController.view 为 nil

我收到以下错误和堆栈跟踪但是视图不是 nil (如在它之前的日志记录所示)

堆栈跟踪

但是,以下代码和输出表示不同。是因为我没有明确的控制器吗?

代码

输出

0 投票
1 回答
1450 浏览

objective-c - 按下 NSToolbarItem 时定位 Popover

我想在用户单击NSToolbarItem. 但是,在我的发件人中,我IBAction没有得到一个NSView实例,我觉得这很奇怪。

我可以显示 Popover(现在通过window.contentView用作我的视图而不是工具栏的视图而错位 - 参见图片):

那么我如何获得我的视图NSToolbarItem以便弹出框出现。

在此处输入图像描述

这是我从控制台得到的错误:

0 投票
0 回答
312 浏览

objective-c - 防止状态栏 NSPopover 激活主窗口

我正在实现一个NSPopover并通过将其设置为自定义视图将其显示在状态栏中。我已经将它的行为设置为瞬态,并且还添加了一个全局事件监视器,这样当任何其他应用程序获得焦点时,它NSPopover就会消失。

这工作得很好,但我遇到的唯一问题是单击弹出框会聚焦应用程序的主窗口。如果我将窗口放在一个空间上并在另一个空间上查看弹出框并与弹出框交互,我会被扔回带有主窗口的空间并获得焦点。有没有办法防止这种情况?也许允许在不激活应用程序的情况下与弹出框交互?

0 投票
3 回答
2610 浏览

cocoa - 在 NSPopover 中使用 NSNumberFormatter

有没有办法让 NSNumberFormatter(或可能是任何其他 NSFormatter)在 NSPopover 中工作?

popover 中 NSTextField 的值绑定到 NSViewController 的代表对象。当在字段中输入无效数字(例如,“asdf”)时,会在包含显示弹出窗口的 NSView 的 NSWindow 中显示一个说明该值无效的工作表。

单击“确定”后,您将获得以下回溯:

objc_msgSend 中崩溃时的寄存器是:

我猜这是因为显示工作表后瞬态弹出窗口的窗口消失了,当前编辑器和任何可以响应选择器的对象也是如此。

将弹出框行为设置为 NSPopoverBehaviorSemitransient 会有所帮助,但如果弹出框因文本字段中的无效值而被解除,则仍会引发异常。

在这一点上,为了避免这个问题,我所能想到的就是手动验证数值。呸。

更新 1

正如 Brian Webster 在下面发现的,这是 AppKit 的一个基本问题。

由于我的验证需求非常简单(只是正整数),因此解决方法是在 KVC 对象中进行手动验证,该对象用作 NSPopover 显示的 NSViewController 中的代表对象。由于 NSTextField确实想使用字符串值,因此使用 -valueForKey: 和 -setValue:forKey: 来转换标量值。当您为文本字段中的绑定值打开“立即验证”时,只要文本字段发生更改,就会调用验证方法。

(在你问之前,一个 NSValueTransformer 不能做这个工作,因为它不参与验证过程。它只会在填充字段或保存更改时被调用。一旦用户输入了一些无效的内容,我就想要反馈数据——就像 NSFormatter 一样。)

这是我所做的要点:

现在我需要洗个澡。

更新 2

感谢@PixelCutCompany 关于他们如何在 PaintCode 应用程序中做事的一些有用提示:

https://twitter.com/PixelCutCompany/status/441695942774104064 https://twitter.com/PixelCutCompany/status/441696198140125184

我想出了这个:

基本上,您可以通过始终提供有效值来避免工作表或对话框出现问题。上面的代码在分配默认值时会考虑最小值和最大值。子类还考虑了 nil 或空字符串以及钳位值。

这让我感觉不那么脏。

0 投票
1 回答
711 浏览

objective-c - 在 Objective-C/Cocoa 中,是否存在用于激活任务控制或更改空间的全局事件?

我目前正在开发一个使用自定义状态项视图和 NSPopover 来显示内容的 OSX 菜单栏应用程序。

我试图让它在有时有意义的时候消失,比如当空间发生变化时,因为弹出框不会像窗口那样移动空间,或者当任务控制器被激活时。

目前,在任务控制中,NSPopover 保持在顶部,如此屏幕截图所示。

目前我正在使用NSEvent addGlobalMonitorForEventsMatchingMask:一些鼠标事件掩码,它工作正常,但不涵盖所有需要的事件。

那么,有没有办法检测主要操作系统事件何时发生,例如打开任务控制、更改空间等?

任何帮助将不胜感激。