强制更新 Cocoa 应用程序主菜单的 NSMenu(嵌套子菜单)

2023-12-09

  1. 我插入了一些子菜单作为主菜单的窗口项子菜单
  2. 我有一个从 NSObject 继承的对象实例(假设它的类名为 MenuController),并支持 2 个 NSMenuDelegate 方法: – 菜单中的项目数量: – 菜单:updateItem:atIndex:shouldCancel:
  3. 该实例作为蓝色对象添加到 NIB 中以便在运行时唤醒
  4. 将步骤 2-3 中的对象配置为子菜单的委托(步骤 1)

现在,我可以在运行时提供子菜单内容。

接下来,我执行以下操作:我可以添加新项目或从数组(包含菜单标题的 MenuController 内)中删除旧项目,该数组通过协议和委托映射到实际子菜单。 一切都很好。 除了一件事:我喜欢为动态菜单项分配快捷方式。 CMD-1、CMD-2、CMD-3 等

窗口 / MySubmenu / MyItem1 CMD-1, MyItem2 CMD-2, ...

因此,为了调用某些项目,我不想去 Window / MySubmenu / MyItem 通过鼠标单击它,我只想按一个快捷键,例如 CMD-3 来调用该项目。

好的,定期它会按预期工作。但是,通常,我无法通知主菜单有关嵌套子菜单的更改,除非打开 Window / MySubmenu 重新加载其内容。 重现问题的一种稳定方法 - 只需尝试删除某些项目并按分配给它的旧快捷方式,在创建新项目作为已删除的替换后 - 宾果游戏 - 在导航到 Window / MySubmenu 查看当前子菜单内容之前,快捷方式将不起作用。

我不知道如何强制主菜单重建其子菜单...... 我尝试过: [[NSApp mainMenu] update] 和使用 NSNotificationCenter 发送 NSMenuDidAddItemNotification、NSMenuDidRemoveItemNotification、NSMenuDidChangeItemNotification 的游戏

我尝试出口到我的子菜单并显式调用更新方法 - 没有办法...... 有时 AppKit 会调用我的委托方法 - 我发现,有时它不想调用任何东西。看起来像是随机策略。

如何确保在“某些调用”之后我的子菜单在内部数组修改后将处于实际状态?


要实现 1:1 映射,请在委托中实现以下 3 个方法:

- (BOOL)menu:(NSMenu *)menu
updateItem:(NSMenuItem *)item 
atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel

and

- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu

and

- (void)menuNeedsUpdate:(NSMenu *)menu
{
    if (!attachedMenu)
        attachedMenu = menu;
    if (!menu)
        menu = attachedMenu;
    NSInteger count = [self numberOfItemsInMenu:menu];
    while ([menu numberOfItems] < count)
        [menu insertItem:[[NSMenuItem new] autorelease] atIndex:0];
    while ([menu numberOfItems] > count)
        [menu removeItemAtIndex:0];
    for (NSInteger index = 0; index < count; index++)
        [self menu:menu updateItem:[menu itemAtIndex:index] atIndex:index shouldCancel:NO];
}

AttachedMenu - 是 NSMenu* 类型的内部变量

接下来,当您想强制刷新子菜单时,随时 - 只需调用

[self menuNeedsUpdate:nil];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制更新 Cocoa 应用程序主菜单的 NSMenu(嵌套子菜单) 的相关文章

  • 如何使用QLPreviewPanel?

    我该如何使用QLPreviewPanel 我知道它以前不是公共 API 但在 10 6 中已经有了 如何使用它在标准 QuickLook 面板中显示文件预览 查看快速查看下载器 http developer apple com librar
  • 复制文件而不冻结 GUI

    好的 基本上这就是我想做的 我的文件列表中有一个文件列表应用程序包 例如在文件夹中myData 请注意 子文件夹 等中有很多文件 文件夹 我想要复制整个文件树到用户磁盘上的给定位置 我需要有访问每个单独的文件被复制 因为其中一些在复制之前需
  • 给 NSWindow 一个背景图片

    好的 我已经在 Photoshop 中创建了一个图像 该图像将与我的应用程序上的按钮对齐 现在我想将其作为窗口的背景图像 以便图像上的字符将对应于我的应用程序上的按键应用程序 我一直在开发的一个小型计算器演示应用程序 基本上 我没有给按钮提
  • 阻止 OpenGL.framework 在 Cocoa 应用程序中加载

    我的应用程序链接到这些框架 Cocoa Framework AppKit Framework CoreData Framework Foundation Framework 请注意 OpenGL Framework 是NOT已链接 但是 设
  • 如何创建无法创建新文档的基于文档的应用程序?

    我有一个基于文档的应用程序 旨在处理现有文档 而不是创建新文档 如何防止应用程序在通过 Finder 打开应用程序时创建新的空白文档 您可以实现一个 NSApplication 委托协议方法 BOOL applicationShouldOp
  • 如何在 Mac OS X 的 Cocoa 上绘制文本内阴影

    如何在 Cocoa for Mac OS X 中的文本上绘制内部阴影 我对 NSView 进行子类化 以创建一个带有渐变背景和内部阴影文本标题的占位符控件 stackoverflow 上所有当前 Core Graphics 的答案似乎都解释
  • 传递给 NSDecimalNumber +decimalNumberWithString:locale: 的区域设置参数是什么,以便它始终与使用点 (.) 小数点标记的 NSString 一起使用?

    我有一个 NSString 我想将其转换为NSDecimalNumber 该字符串是从服务器接收的 并且始终使用以下格式进行格式化en US语言环境类似XXX YYY不喜欢XXX YYY 我想创建一个NSDecimalNumber它接受XX
  • 更新到 SDK 1.3.1 后未捕获 GMSMapView 上的拖动/平移手势

    我在通过手势识别器捕获 GMSMapView 上的拖动 平移手势时遇到了一个奇怪的问题 此问题仅在从 GMS 1 2 更新到 1 3 1 后才出现 其中 引用文档 https developers google com maps docum
  • NSMenuItem with attributeTitle 包含 NSFont 对象,绘制带有基线偏移的标题

    我正在尝试使用系统中可用的字体列表创建一个 NSPopUpButton 看起来很明显的任务 但我失败了 我想 我错过了一些如此明显的事情 以至于我完全忘记了它 代码非常简单 let button NSPopUpButton button m
  • 如何将 JPG 文件加载到 NSBitmapImageRep 中?

    Objective C 可可 我需要将 JPG 文件中的图像加载到二维数组中 以便可以访问每个像素 我正在尝试 未成功 将图像加载到 NSBitmapImageRep 中 我尝试了以下两行代码的几种变体 NSString filePath
  • 如何从 Xcode 4 中的实体创建用户界面?

    我已经用核心数据进行了几天的实验 并且在过去的几个小时里尝试找出如何从 xcode 4 中的实体创建 UI 根据我一直在阅读的书籍 您必须选择将核心数据实体拖到界面生成器中的窗口中 但是当我在 xcode 4 中执行此操作时 没有任何反应
  • Cocoa 基于文档的应用程序中的 MVC

    我目前正在对我的应用程序进行重构和重组 我意识到模型和视图及其控制器之间的一些分离已经减少 我希望进行一些清理 我的应用程序中使用了几个关键类 NSPersistentDocument NSWindowController 和模型类 NSP
  • 使用 UIKeyCommand 检测删除键

    任何人都知道如何使用检测 删除 键UIKeyCommand在 iOS 7 上 当人们在使用 Swift 时遇到问题时 我认为用 Objective C 和 Swift 编写一个小型的 完整的例子可能是一个很好的答案 请注意 Swift 没有
  • 如何确定 NSTimeInterval 是否发生在任意 NSDate 期间?

    我有一个 NSTimeInterval 我想知道该时间戳是否位于日期的开始和结束之间 基本上我需要能够做类似的事情 NSDate today NSDate date NSTimeInterval myInterval someInterva
  • 从 cocoa 编辑系统偏好设置

    有没有办法使用可可以编程方式编辑系统首选项 是否需要一些框架 我需要这样做来更改全局代理设置 另外 我的应用程序是沙盒的 有关于如何执行此操作的示例代码吗 感谢您的帮助 您正在寻找系统配置框架 但这并不容易 我认为沙盒应用程序不可能这样做
  • 使用基于约束的布局自动调整 NSTokenField 的大小

    有没有办法自动调整大小height使用约束的 NSTokenField 保持宽度恒定 sizeToFit应该有效 但事实并非如此 如果我设置一个约束来保持宽度不变并调用此方法 它将忽略约束并仅调整宽度大小 当我想要的是仅调整高度大小时 基于
  • 适用于 Objective-C / iPhone 的良好 HTTP 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPDATE 这个问题显然已经过时了 参见日期 我建议只使用现代 iOS7 功能 例如 NSURLSession 我想 这个问题是为了历史
  • 使用 Cocoa 获取无法安装的驱动器列表

    我想获取在 OS X 下使用 Cocoa Objective C 无法安装 弹出的驱动器列表 我希望 NSWorkspace getFileSystemInfoForPath 能帮助我 NSArray listOfMedia NSWorks
  • NSView 鼠标跟踪

    我在 Mac OS X 上遇到了 Cocoa NSView 的奇怪行为 我在 NSView 容器中有一个自定义 NSView 这个自定义 NSView 跟踪鼠标移动 点击 并有一个工具提示 当我在所描述的视图上方添加 NSView 时 即使
  • 如何将NSTextView的格式化内容转换为字符串

    我需要将 NSTextView 的内容从 Mac 应用程序传输到 iOS 应用程序 我使用 XML 作为传输文件格式 所以我需要将 NSTextView 的内容 文本 字体 颜色等 保存为字符串 有什么办法可以做到这一点吗 一种方法是存档

随机推荐

  • Jssor slider - 如何销毁并重新创建具有不同内容的 Jssor slider

    我正在尝试使用 Jssor 滑块根据所选类别及其子类别显示不同的 HTML 内容 我成功地为一个子类别创建了内容滑块 但我不知道如何销毁当前滑块并使用通过 Ajax 加载的不同内容重新创建它 子类别中的项目数量有所不同 因此据我了解 更改当
  • MySQL:使用计算约束创建表

    创建表时 是否可以根据两列的计算值声明约束 这是解释我想要做什么的伪代码 CREATE TABLE employee comments id int 11 user id int 11 franchise branch id int 11
  • Reactjs:路由器的渲染道具不起作用

    我的项目没有出现任何错误 它只是不渲染任何内容 我错过了什么吗 在 App js 中 我使用 render props 进行数据传输 import App css import BrowserRouter as Router Route R
  • 我可以“撤消”`git lfs checkout 吗?

    我运行了以下命令 git lfs migrate import everything include pdf git reflog expire expire unreachable now all git gc prune now git
  • 查找有向图中的所有循环

    如何找到 迭代 有向图中往返给定节点的所有循环 例如 我想要这样的东西 A gt B gt A A gt B gt C gt A 但不是 B gt C gt B 我在搜索中找到了此页面 由于循环与强连通分量不同 我继续搜索 最后 我找到了一
  • 使用 jQuery 添加带有 HTML5 数据属性的选择选项

    我正在尝试使用 jQuery 为选择元素构建一组选项 除了应该包含的数据属性之外 它正在工作 这似乎被省略了 这是我的代码 cJ is JSON object currency is my select element function m
  • 桌面图形 - 或“皮肤”窗口

    我正在寻找一种在桌面上绘制动画的方法 无窗框且背景透明 我在 Windows XP 中使用 Python 但它不一定是跨平台的 尽管这会是一个很好的好处 有谁知道可以做到这一点的Python库吗 如果您想要无框窗户 有多种选择 例如 pyg
  • Log4js javascript 创建每日日志文件

    我有一个nodejs项目 使用log4js来写日志 我想在开始新日期时创建新的文件日志 例子 每日 2017 07 31 log每日 2017 08 01 log每日 2017 08 02 log每日 2017 08 03 log 在jav
  • 运行 Multidexed Espresso .APK

    运行 Espresso 测试时 gradlew connectedDebugAndroidTest 我们遇到了这个问题 com android build api transform TransformException com andro
  • .h 中定义的函数在 .cu 中声明

    我将一个项目分为三个文件夹 src include obj 我正在使用 CImg h 和 cuda h 库 我声明void convolve cimg library CImg
  • 上传的 docx 文件转为 zip

    我目前正在使用 symfony 1 4 并希望允许用户上传 Microsoft Word docx 文件 使用下面的 sfWidgetFormInputFile 小部件和 sfValidatorFile 用户可以使用简单的 Web 表单选择
  • 在 Swift 中将要通过网络发送/接收的日期(绝对时间)转换为数据?

    我正在寻找一种快速生成时间戳的方法 我的 macOS 应用程序会记录一些数据 并用数据创建的时间对其进行标记 然后数据将通过网络发送 如Data 在 iPad 上重建 是否有任何 Swift 类可以生成时间戳 国家标准日期 NSTimeIn
  • 如何使用 future 修复 java lambda 过滤器(缺少 return 语句)

    如何解决java lambda过滤未来集合 我得到了一个 future 集合 并且我想过滤掉集合中返回的错误结果 但是使用 lambda 来报告 缺少 return 语句 我想要得到一个集合看起来像List
  • Bootstrap 3:如何使用推拉将左侧边栏拖放到内容下方

    我正在使用 Bootstrap 3 在移动设备上 我想垂直堆叠所有 div 侧边栏和内容 并将左侧边栏放置在移动 xs 设备上的主容器下方 当前位于左侧边栏的右侧 HTML 看起来像这样 div class container div cl
  • 恢复使用 tf.estimator 训练的模型并通过 feed_dict 提供输入

    我用 tf estimator 训练了 resnet 模型在训练过程中被保存 保存的文件包括 data index and meta 我想加载这个模型并获得新图像的预测 在训练期间将数据输入模型tf data Dataset 我密切关注了
  • 如何保存带有负值的PIL图像

    我正在尝试使用 PIL 保存具有负值的图像 但是 保存后 图像文件的所有负值均被剪裁为 0 from PIL import Image import numpy as np generate random image for demo im
  • 在集成测试中使用命名路由是否合适?

    其中哪一种是编写集成 请求 测试的 正确 方法 it should be successful do get about terms response should be success end it should be successfu
  • 最令人烦恼的解析的目的是什么?

    On 维基百科我找到了这个 A a A 这 可以消除歧义 类的变量定义 A 获取类 的匿名实例A or 返回类型为 的对象的函数的函数声明A 并采用单个 未命名 参数 该参数是返回类型 的函数A 并且不接受任何输入 大多数程序员期望第一个
  • 在数据框中分割日期和时间[重复]

    这个问题在这里已经有答案了 我在数据框中有一个日期格式的列列表201001011200 as Y m d H M 我想把它们分成 Y m d and H M作为日期和时间 我尝试过了as Date data Date origin 1970
  • 强制更新 Cocoa 应用程序主菜单的 NSMenu(嵌套子菜单)

    我插入了一些子菜单作为主菜单的窗口项子菜单 我有一个从 NSObject 继承的对象实例 假设它的类名为 MenuController 并支持 2 个 NSMenuDelegate 方法 菜单中的项目数量 菜单 updateItem atI