我想创建一个NSMenu
,其中包含默认情况下隐藏的NSMenuItem
,并且仅在用户按住键盘修改键时显示。
基本上,我正在寻找与Finder的Go菜单中的库选项相同的行为:
我已经尝试使用[NSEvent addglobalmonitor foreventsmatchingmask:handler://code>安装密钥侦听器,通过设置
hidden
属性以编程方式隐藏和取消隐藏NSMenuItem
。这种方法是有效的,但问题是当NSMenu
打开时隐藏/取消隐藏将不起作用。显然,NSMenu
在打开时完全接管事件处理循环,从而阻止键侦听器工作
当NSMenu
打开时,我可能会使用CGEventTap来接收事件,但这似乎完全是过火了。
我发现的另一个与我想要的功能类似的功能是
NSMenu
的“替代”机制。但我只能让它关闭NSMenuItems
,而不能隐藏它们。
任何帮助都将不胜感激。谢谢
我找到了一个表现完美的解决方案!
>
在要隐藏的NSMenuItem
上,将alternate
属性设置为YES
,并将keyEquivalentModifierMask
属性设置为要取消隐藏该项的键盘修改器。
在您的NSMenu
中,就在您想要隐藏的NSMenuItem
之前,插入另一个高度为0的NSMenuItem
。
在Objc中,您可以创建高度为0的NSMenuItem
,如下所示:
objectivec prettyprint-override">NSMenuItem *i = [[NSMenuItem alloc] init];
i.view = [[NSView alloc] initWithFrame:NSZeroRect];
可隐藏的NSMenuItem
现在将替代它前面的零高度NSMenuItem
。默认情况下将显示零高度项,但当您持有指定的键盘修饰符时,零高度项将与可隐藏项交换。因为零高度项目是不可见的,这具有解除隐藏可隐藏项目的效果。
假设您的仅选项菜单项的操作是(在Swift中)performOptionOnlyMenuItem(_:)
,其目标是您的App委托
。
>
您需要做的第一件事情是确保App委托
符合NSMenuItemValidation
协议。
您需要做的第二件事是实现validateMenuItem(_:)
方法,并让它检查菜单项是否发送performOptionOnlyMenuItem(_:)
操作。如果是,则根据当前是否按下选项键来设置项的isHidden
属性。
如果不需要验证任何其他菜单项,代码可以如下所示:
extension AppDelegate: NSMenuItemValidation {
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
switch menuItem.action {
case #selector(performOptionOnlyMenuItem(_:)):
let flags = NSApp.currentEvent?.modifierFlags ?? []
menuItem.isHidden = !flags.contains(.option)
return true
default:
return true
}
}
}
如果该操作被发送到其他目标,则需要在该目标上实现验证(包括协议一致性)。每个菜单项仅由项的目标验证。
Windows上 只给某一个键盘 改键 的 软件或方案 购买某个可编程键盘,使用自带的软件可以实现.但是需要花钱. 搜索过类似的软件,但目前没有找到可以只给一个键盘改键的功能,都是全局键盘修改 linux上可以实现这一点,但是我需要在Windows上实现这一点.目前正在思考套娃的可能性
我成功创建了一个包含1个键和2个值的查找表: 但当我试图将其扩展到4个值时,我发现了一系列错误,我发现条目仅限于2个值! 那么,请,如何对1个键和4个值做类似的事情?我不能通过为第一个映射的第二个参数声明内部map.entry来扩展它。条目,因为在这一点上,第一个字符串不再是唯一的,我是说,映射的所有参数。条目 你们不需要走我走的路。你们可以自由地提供任何解决方案/数据结构,允许我存储和检索3个字
我有一个二维整数数组。我想把它们放入一个散列图。但我希望基于数组索引访问来自HashMap的元素。类似于: 对于[2][5],,该map.get(2,5)返回与该键关联的值。但是我如何创建一个带有一对键的hashMap呢?或者通常使用多个键:,我可以使用get(key1,key2,...keyN)访问元素。 编辑:三年后,张贴的问题,我想添加一点更多 我遇到了的另一种方式。 数组索引、和可以通过以
我已将我的UIkeyboarddismissmode设置为。交互式,我不知道如何调整UITextView的大小,以便键盘不会覆盖内容。我还有一个UIToolbar作为输入附件。 这是我的密码。 上面的代码只会使文本视图以一种奇怪的方式移动,我不知道如何达到消息应用程序那样的效果。 更新时间: 我把代码改为上面的。但有时,当我将键盘松开一半时,scrollView会突然弹到底部,这很奇怪。有什么建议
我正在尝试修改哈希映射。“value”是由逗号分隔的值组成的单个字符串。(例如:“aid=abc,bid=def,cid=gh2”) 我需要用DB中的相应值替换它们中的特定值。(例如,将bid更改为123,这将导致上述“值”字符串为:“aid=abc,bid=123,cid=gh2”) 然后将修改后的“value”设置为相应的键,以便hashmap由修改后的值组成。 我尝试遍历键,并使用将给出值的
我正在使用为Redis添加和检索数据。但一旦数据写入redis,我可以看到多个键,而不是一个。到期时,只有一个密钥被移除,其余的密钥仍然存在于Redis中。 要保存, 但是当我打开并运行时,我可以看到, 在设置之后,如果再次运行相同的命令,我可以看到, 这些附加密钥是什么,以及为什么使用完整包名和随机唯一标识符创建这些密钥。 谢谢