我希望在我的Mac应用程序的菜单栏中有一个图标 - 并且图标应该在点击时生成一个菜单。虽然在菜单中有更多条目,但我希望将顶行作为通用文本输入字段 - 就像它在Spotlight中一样:
http://dl.dropbox.com/u/3943878/_mine/Screen%20shot%202011-07-16%20at%2012.29.18.png
是否可以将此类字段添加到NSMenu
?或者我应该将其作为面板型窗口?
答案 0 :(得分: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];
答案 1 :(得分:2)
您可以使用-[NSMenuItem setView:]
将任何视图放入菜单中。请参阅NSMenuItem.h中的长注释和应用程序菜单和弹出列表编程主题中的菜单中的视图部分。
答案 2 :(得分:0)
你可能会挣扎很多。我刚刚尝试做同样的事情,并在Ahruman引用的应用程序菜单和弹出列表编程主题文档中阅读菜单中的视图,我发现:
菜单项中的视图可以正常接收所有鼠标事件,但不支持键盘事件。在“非粘性”菜单跟踪期间(即按住鼠标按钮操作菜单),菜单项中的视图接收mouseDragged:events。
我认为我们是SOL。显然Spotlight会弹出一个无边框窗口。