如何在菜单栏中获得类似聚光灯的文本输入效果?

问题描述 投票:0回答:3

我想在我的 Mac 应用程序的菜单栏中有一个图标 - 并且该图标应在单击时生成一个菜单。虽然菜单中有更多条目,但我希望将顶行作为通用文本输入字段 - 就像在 Spotlight 中一样。

是否可以在

NSMenu
中添加这样的字段?或者我应该把它做成面板式窗口?

objective-c macos cocoa interface-builder spotlight
3个回答
3
投票

如果您使用的是 xcode 4,请在界面生成器中创建自定义视图并添加文本字段或任何您想要的内容。在 IB 中,还可以从对象库中拖放一个“菜单”,其中包含任意数量的项目。然后,只需按住 Ctrl 键并单击要放入文本字段的菜单项(在您的情况下,它将是顶部的菜单项),然后拖动到自定义视图并选择“视图”。现在,当您打开菜单时,它不会显示该空间中的菜单项,而是显示自定义视图中的所有内容。

编辑:至于你的评论,这是你应该做的。通过打开助理编辑器视图并按住 Ctrl 键并从菜单中单击到要使用的头文件,使菜单成为一个出口。现在,只需创建一个每当菜单打开时就会运行的方法,方便地苹果已经做了这个,它被称为 menuWillOpen。

- (void)menuWillOpen: nameOfYourMenu{

[self performSelector:@selector(methodExecutedWhenMenuIsClicked) withObject:nil afterDelay:0.0 inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];

0 处的延迟将使其立即发生,它必须在公共模式运行循环中完成,以便菜单即使在打开时也会更新。现在只需制作

methodExecutedWhenMenuIsClicked
并设置它以便文本字段做出响应。

- (void)methodExecutedWhenMenuIsClicked{

[[yourTextfiled window] makeFirstResponder:yourTextField];

2
投票

您可以使用

-[NSMenuItem setView:]
将任何视图放入菜单中。请参阅 NSMenuItem.h 中的长注释和应用程序菜单和弹出列表编程主题中的菜单中的视图部分。


0
投票

你可能会遇到很多困难。我只是尝试做同样的事情,并阅读 Ahruman 引用的应用程序菜单和弹出列表编程主题文档中的菜单中的视图,我发现了这个:

菜单项中的视图可以正常接收所有鼠标事件,但不支持键盘事件。在“非粘性”菜单跟踪(即按住鼠标按钮操作菜单)期间,菜单项中的视图接收 mouseDragged: 事件。

我认为我们是SOL。显然,Spotlight 会弹出一个无边框窗口。

© www.soinside.com 2019 - 2024. All rights reserved.