问题标签 [nstoolbaritem]
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.
cocoa - 相关控制器中的 NSToolbarItem 验证
我有一个 NSToolbarItem,其视图为 NSButton,主菜单中有一个 NSMenuItem。两者都有相同的动作,发送给第一响应者,而不是特定目标。该方法最终在 NSSplitViewController 的子类中实现,位于窗口内容视图的视图层次结构中。我想验证这两个项目,但让特定的拆分视图控制器负责验证,因为它依赖于该控制器本地的一些条件。
我覆盖validateToolbarItem(_:)
并validateMenuItem(_:)
在那个拆分视图控制器中。对于菜单项,这是按预期工作的。调用该方法并进行验证。validateToolbarItem(_:)
但是,从不调用。
根据Apple 的文档,NSToolbar 不会发送validateToolbarItem(_:)
到基于视图的工具栏项目。为了测试这一点,我用图像工具栏项目替换了工具栏项目,它可以按预期工作。
基于此,我遇到了几种解决方案,但它们并不是我想要的。
子类 NSToolbarItem 并覆盖
validate()
。但是,没有给出关于我最终如何让控制器validateToolbarItem(_:)
调用的指导。子类 NSToolbar 和 override
validateVisibleToolbarItems()
,然后向第一响应者发送消息。在这里,我遇到了问题,我无法向拆分视图控制器发送消息,因为它位于工具栏的响应程序链之外。子类 NSToolbar 如上所述,但
validateToolbarItem(_:)
在响应者链中的控制器中实现,例如 NSWindowController。这会起作用,但是我必须添加额外的代码来处理菜单项不需要的内容。
是否有一个优雅的解决方案可以像图像工具栏项和菜单项一样工作?
swift - 带有徽章计数器的自定义 NSToolbarItem
我正在尝试在自定义 NSToolbarItem 内的 NSButton 上添加自定义徽章计数器圈。
它应该看起来像这样(红色圆圈和里面的数字):
我已经尝试通过添加一个内联按钮在情节提要中做到这一点,但我对它的定位没有太多控制,并且也无法为徽章设置纯色。
失败的尝试:
然后我尝试实现这个家伙技术(我转换为 swift3):http ://bertmcdowell.com/posts/2013/nstoolbarbadgeditem.html
但是这种技术的问题在于它直接继承了 NSToolbarItem,所以我不能将它绘制到 NSButton 的边界之外。结果如下:
我觉得我需要在 NSButton 后面绘制一个自定义视图,以便它有空间在右上角绘制徽章而不会被剪裁。还有其他想法吗?
macos - 具有分段控制的 NSToolbarItem - 图像未正确呈现
我正在尝试模拟 Xcode 的工具栏控件来显示/隐藏导航器和检查器:
...但没有底部窗格(仅左侧和右侧:两段)
我从 Xcode 的 UI 中截取图标并在图像编辑应用程序中跟踪它们。左窗格的资源是:
@1x:
(20x20 @72 dpi)
@2x:
(40x40 @72 dpi,虽然使用 20x20 @144 dpi 似乎没有区别)
右窗格的对应项相同,但水平翻转。
所有资源都存储在资产目录中,如下所示:
我在工具栏上放置了一个分段控件,以创建一个带有分段控件的工具栏项,并为每个段(0 和 1)设置图像属性。
两个段的图像缩放设置为“按比例缩小”。段控件已选中段宽度“固定”,两个段的宽度均为 48。工具栏项的最小尺寸为 (83 x 25),最大尺寸为 (100 x 28)。
图标在故事板上正确显示(界面生成器)。
但是,当我运行该应用程序时,我无法正确显示图标图像。
- 如果我在视网膜显示器上启动我的应用程序,则任何部分都不会显示任何图标。
- 如果我将窗口移动到外部非视网膜显示器,则会显示两个图标。
- 如果我从 w 目录中删除两个图像集中的一个并运行该应用程序,则另一个图标将正确显示!(在任一显示器上)
- 如果我进一步为两个段设置相同的剩余图像,它们将正确显示!
- 如果我将两个图像集都保留在项目中,但将其中一个片段中的图像字段重置为空,则不会显示另一个图标!
到底是怎么回事??
我在 GitHub 上放了一个示例项目来重现该问题。
编辑:为了确保,我使用 cartool 命令行实用程序从已编译的应用程序二进制文件中提取了资源(如本答案中所述),并且所有 4 个图像的大小都正确...
解决方案:正如Ivan 在下面的回答中所建议的,我切换到使用矢量图形 (PDF) 作为图标。我下载了 Acorn 的试用版并以 1 倍大小重新创建了我的图标,然后导出为 PDF。
为了避免在运行时以@2x 的放大尺寸出现模糊,我必须确保编辑器中的所有坐标都是整数,并在矢量形状检查器中为每个形状图层选中“对齐像素”框:
(美好的结局)
macos - 如何使用图标创建一致的工具栏按钮
所需外观
我希望为我的应用程序制作一个工具栏,其中包含一些简单的按钮,每个按钮都有一个单色图标。下面是一些类似于我正在尝试实现的工具栏按钮的示例,来自 Mail 的撰写窗口:
请注意,这些按钮具有一致的大小、内部填充、填充和阴影。这是整个 macOS 中非常一致的样式,出现在 Mail、Safari、Finder 等中。这让我怀疑有一个标准化的 UI 组件来创建此类按钮。
如果我使用分段控件,每个按钮看起来都是正确的,每个图标都被正确填充:
现在我想添加与样式匹配的单个按钮。
尝试 1
我的第一次尝试是在工具栏上添加一个“按钮”(NSButton
):
这导致一个宽按钮有点太短,并且没有与分段控件对齐:
尝试 2
我的第二次尝试是使用分段控件,只有 1 个分段。
这导致按钮的形状、大小等正确,但相对于标签偏离了中心。
当然,我可以手动调整按钮以匹配目标,但我觉得我错过了一些东西。创建这些标准按钮的正确方法是什么?
swift - 使 NSToolbarItem 成为第一响应者
在我的 MacOS 应用程序NSSearchField
中,工具栏中有一个。我想让用户通过按下来集中注意力CMD+F
(与许多 Apple 应用程序中使用的行为相同)。我创建了一个NSMenuItem
具有等效键的CMD+F
- 它调用以下函数,该函数应该是NSSearchField
第一个响应者。
按下CMD+F
时,它似乎在NSSearchField
很短的时间内成为第一响应者(标题开始向左移动),但在焦点环出现之前它失去焦点(NSSearchField
不拒绝第一响应者)。
我也尝试使用NSToolbarItem
's menuFormRepresentation.view
,结果相同。
我怎样才能NSToolbarItem
成为第一响应者?任何帮助表示赞赏!
swift - 如何检测来自 NSWindowController 内的 NSToolbarItem 的点击?
我的 macOS 应用程序上有一个工具栏,是用 Swift 开发的。toolbarItem 可以拖到 NSWindowController 上,我可以设置一个 IABAction 函数,我现在在函数中有一个打印。当我点击按钮时没有任何反应,点击似乎没有被识别为一个动作?
我在函数中有几行代码,但删除了它,现在只有 print("test") 行。
没有观察到输出,所以当我单击此按钮时,我希望在控制台中获得“测试”。
这是与工具栏项关联的连接列表。