问题标签 [nsmenuitem]
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.
objective-c - 在每次打开时修改 NSMenu 结构?
我需要能够在每次显示时动态修改 NSMenu 层次结构(添加/删除项目等)。例如:
- 用户在主菜单上启动跟踪会话并选择子菜单
- 检测子菜单即将打开并运行代码来修改它
- 继续跟踪,用户再次在同一个子菜单上跟踪:转到 2
所以要做到这一点,我有一个实现NSMenuDelegate协议的对象。menuNeedsUpdate方法第一次起作用 (2),但在第二次打开子菜单时不起作用。(每个跟踪会话仅调用一次)
方法menuWillOpen每次都会被调用,但是有文档有以下警告,这似乎取消了使用这种方法的资格:
在此方法期间不要修改菜单或菜单项的结构。
有没有办法做到这一点?
objective-c - 以编程方式为 NSStatusBar.systemStatusBar 创建 NSMenu
我正在尝试仅使用代码在系统状态栏中创建一个简单的菜单。我没有收到任何编译或运行时错误,但我看不到任何效果。
cocoa - 如何将 NSMenuItem 绑定到 NSArrayController
如何将 NSMenuItem 的启用状态绑定到 NSArrayController 的选择?我已经尝试将项目的启用状态绑定到控制器的 selectedObjects 或 selectedIndexes ,并且在任何情况下,当有选择时菜单项都不会启用。在 IB 中,我取消选中“启用”复选框。我只是希望在表中有选择时启用 NSMenuItem。我的表允许多项选择,我还使用了一个绑定到 selectedObjects.@count 的按钮,并且该按钮按预期启用/禁用,所以我认为使用相同的键路径也适用于 menuitem,但不是。这并不难,因为我无法通过谷歌找到答案,所以我认为它一定很简单。谢谢
cocoa - 如何让我的菜单看起来像这样
我如何通过 menulet 应用程序获得这种效果。我只想要窗户效果。
我当前的应用程序看起来像这样。请如果有人能阐明一下,将不胜感激。谢谢。
objective-c - 添加“未选择”选项以绑定 NSPopupButton
我有一个绑定到支持核心数据的 NSArrayController 的 NSPopupButton。NSPopupButton 的选择也绑定到一个核心数据支持项。绑定大致如下:
selectedObject 上有一个方法,该方法查找一个 ID,该 ID 找到一个对象并返回该对象,如下所示:
并且以另一种方式设置对象非常简单:
大多数情况下,对象与可用 contentValues 列表中的对象匹配。但是,有时所选对象的 ID 为 0 - 在这种情况下,我想在可用列表中显示一个名为“未选择”的选项。如果对象 ID 为 0,我可以轻松地完成发回不同的对象(或什么都没有)。
我可以用“无选择占位符”来处理这个问题,但是一旦用户选择了其他项目之一,未选择的占位符就会从列表中删除。
我希望能够为用户提供选择项目的能力,或者选择不选择项目(即将其设置回“未选择”)。每次选择更改时,没有通过遍历我从核心数据中获得的数组以编程方式创建整个 NSPopupMenu,有没有办法将一个菜单项插入到列表中,表示用户始终可以使用的未选择状态?
我已经考虑将一个实体对象添加到核心数据存储中,该对象具有所有基于 0 的值,但名称除外,即“未选择”。然而,这只是感觉不是正确的做事方式,并且实际上提出了一些其他问题,即在存储中存在实际上没有任何数据相关性的空对象。
与往常一样,我们将不胜感激任何和所有的帮助。
解决方案
好吧,我并没有完全按照Hobbes the Tige
发布的内容进行操作,但这几乎使我到达了需要的位置。我最终创建了一个方法,而不是在 IB 中绑定,该方法允许我在选择更改时将我的对象数组发送到父数组或发起更改的用户活动。然后该方法简单地使用适当的核心数据实体信息更新 NSPopupButton,并且仍然允许我向我们的 IB 绑定匹配对象的 selectedTag。
这是方法
显然,这取决于传递的任何对象数组是否符合name
描述性字段的 a 和uid
唯一标识符的 a。
任务完成。:-)
objective-c - NSMenuItem 自定义视图问题
我试图在 NSMenuItem 中放置一个自定义视图,这是我得到的结果:
如何去除顶部和右侧的白色填充?谢谢。
objective-c - 菜单中的可可键等效项不起作用
我创建了一个 NSStatusItem 并在界面生成器(Xcode 4.0)中分配了两个等效键。这些用于首选项菜单 cmd- 和退出选项 cmd-q。当菜单突出显示/打开时,这两者都可以工作,但即使应用程序是最重要的,也不会工作。关于为什么会发生这种情况或我如何改变这种情况的任何想法?
objective-c - 如何使用自定义视图隐藏菜单项?
-setView:
我在 NSMenuItem(使用方法)中使用了一个非常简单的自定义视图(仅包含一个只读的 NSTextField 和一个 NSSegmentedControl )。这部分按预期工作。
这是问题所在:在-menuNeedsUpdate:
NSMenu 委托方法中,我有条件地隐藏了菜单项。当我调用[item setHidden:YES]
时,具有自定义视图的菜单项不会隐藏,但其他“香草”菜单项会隐藏。
我的自定义视图构建在它自己的 XIB 中,我通过自定义 NSViewController 访问它。
更新
即使我在 Interface Builder 中选中 Hidden 复选框,菜单项仍然可见,并删除它在代码中隐藏的行。
更新 2
我还尝试在设置菜单项hidden
之前和之后设置自定义视图。hidden
结果好像菜单项没有隐藏,但视图是;视图的控件是不可见的,但它们应该在的地方仍然存在差距。
更新 3
我修改了 Apple 的MenuItemView示例代码,以在添加后隐藏其中一个菜单项(在第 87 行插入[menuItem setHidden:YES];
),它与我的代码中的效果相同(也就是说,没有)。
我开始认为隐藏此菜单项的唯一方法是将其视图设置nil
为何时需要隐藏它并在需要显示它时将其放回原处,但这似乎没有必要。
更新 4
使用下面迈克的回答,这是我正在使用的代码:
objective-c - 从 Interface Builder 连接 NSMenuItems 的最佳方法是什么?
所以我花了一些时间检查 CocoaDev,阅读 NSMenuItems 上的 Cocoa 文档,并在 Interface Builder 中进行了一些测试。
在我的应用程序中,我有一个在 Interface Builder 中设计的应用程序菜单([NSApp mainMenu])。我看到了三种可能的路径:
将我的动作响应者放在 NSApplicationDelegate 中。这对我来说似乎很奇怪,部分原因是它位于食物链的上游,部分原因是它似乎被固定住了。
创建一个子视图来监听各种 NSMenuItem 操作消息。这看起来很有用,但看起来为了让它在响应者链中,可能有一些我无法理解的魔法。
创建一个监听特定应用程序菜单内容的 NSObject,将其放入 xib 中,然后将其连接起来。在我看来,这似乎是目前最好的解决方案,因为我可以隔离东西,而不是依赖响应者链来到达特定对象。但我想知道,当我的应用程序达到足够复杂的水平时,这是否可能是一个问题,因为它篡夺了响应者链,这可能是出于易用性之外的原因。
对不起,很长的问题。有首选方法吗?谢谢!
objective-c - 使用自定义视图突出显示 NSMenuItem?
我创建了一个简单NSStatusBar
的NSMenu
菜单集。我还在NSMenuItems
这个菜单中添加了一些,它们可以正常工作(包括选择器和突出显示),但是一旦我添加了自定义视图(setView :),就不会出现突出显示。
我的 foo 方法是:
如果我删除 setView 方法,它将突出显示。
我已经搜索和搜索,但找不到实现/启用此功能的方法。
编辑
我通过在我的 NSView 子类中遵循此问题中的代码来实现突出显示: