在尝试学习菜单处理的基础知识时.我的测试应用程序的菜单栏有3个菜单 - 即"TestApp","文件"和"帮助".我发现我可以完全删除这些菜单,只需调用say:
NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];
Run Code Online (Sandbox Code Playgroud)
但是,我只想暂时禁用它们(灰掉它们).请问有同样简单的方法吗?
我有一个NSMenu包含NSMenuItems自定义视图.我想要它,以便当按下alt按钮时,菜单项将改变它们的一部分外观(通过它们的视图).然而,我setAlternative在NSMenuItem文档中发现,实际上我只能在NSMenuItems没有自定义视图的情况下使用它.一旦我设置了自定义视图,就会显示所有菜单项.此外,我尝试在菜单打开时获取按键事件.由于其他运行循环,NSApplication's sendEvent:在菜单关闭之前不会接收事件.因此,我不能只是拦截即将发生的事件.
有没有人知道如何通过委托或子类化来通知菜单打开时何时按下alt键?
我有一个带有大量项目的NSMenuItem,但是...列表没有启用.
我的意思是说:

这是我的代码:
- (void)didFetchNewList:(NSArray *)list
{
NSArray *smallList = [list subarrayWithRange:NSMakeRange(0, 10)];
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
for (NSDictionary *dict in smallList)
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd @ HH:mm:ss"];
NSMenuItem *soMenuItem = [[NSMenuItem alloc] initWithTitle:
[dateFormatter stringFromDate:[dict objectForKey:@"date"]]
action:nil
keyEquivalent:@""];
[soMenuItem setEnabled:YES];
[menu addItem:soMenuItem];
}
[menu addItem:[NSMenuItem separatorItem]];
NSMenuItem *soMenuItem = [[NSMenuItem alloc]
initWithTitle:@"Settings" action:nil keyEquivalent:@"S"];
[soMenuItem setEnabled:YES];
[menu addItem:soMenuItem];
[statusItem setMenu:menu];
[statusItem setEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)
我将所有内容设置为已启用,但仍处于禁用状态.我怎么解决这个问题?
我有:
似乎NSMenu默认视图在执行动画时会阻塞主线程.我已经通过辅助线程输出time_since_last_loop与视图的drawRect:(主线程)进行了测试,只有drawRect显示了断断续续.自定义视图的drawRect从~30 fps下降到5帧几帧.
有没有NSMenu动画非阻塞,或与自定义视图的drawRect并发的方法?
我有兴趣在NSMenu打开时捕获按键.例如,如果菜单是开放的,用户按下"E",或"1"在键盘上,发送特定的消息(优选地通过压制成哪个键的事件对象包含参考).
我看着备用菜单,但我只能被用来捕捉选项键的印象是.
目前我没有使用任何自定义视图,只是NSStatusBar(菜单产生的地方)和NSMenu.
我是Objective-C的新手,所以如果我的措辞不正确,我会道歉.
真的很感激帮助!
我想通过显示NSMenu鼠标光标位置来对热键按下做出反应.
我的应用程序是UIElement,并没有自己的窗口.
我知道有方法NSMenu:
-(void)popUpContextMenu:(NSMenu *)menu
withEvent:(NSEvent *)event
forView:(NSView *)view;
Run Code Online (Sandbox Code Playgroud)
但是当没有视图时它似乎不起作用:(.
我应该在鼠标光标位置创建假透明视图,然后在那里显示NSMenu,还是有更好的方法?
可以用Carbon实现吗?
我有一个带有源列表(NSOutlineView)的窗口.我的源列表只有两个级别.第一级是标题,第二级是数据.我想在一些数据单元格上有一个上下文菜单.不是全部.
首先,我尝试在表格单元格视图上附加一个表示数据单元格的菜单 - >没有任何反应.
其次,我在IB中的大纲视图上附加一个菜单 - >在每个单元格(标题和数据)上打开上下文菜单.我搜索停止打开菜单,但我找不到任何东西.
你有什么想法吗?
谢谢
OS X 10.8.2 Lion,Xcode 4.5.2,SDK 10.8
我有一个控制器对象拥有一个NSMenu并且是该菜单的委托,为了懒惰的人口.
但是,既numberOfItemsInMenu:没有menuNeedsUpdate:也没有调用过,因此菜单仍然是空的.
我已经确认:
如果我执行menuWillOpen:,即是所谓的,但你不应该来填充菜单出现.
我尝试向菜单发送update消息,但这没有任何效果.代表仍然没有打电话,菜单仍然空着.
如果相关:此菜单不在主菜单中; 它在其他地方使用.
为什么菜单要求其代表填充它?有没有我错过的东西,或者这只是打破了?
我的应用程序具有默认的“帮助”菜单。我删除了“帮助”条目并添加了一个链接到我网站上的论坛的支持条目。
帮助菜单笔尖如下所示:

但是一旦我启动了应用程序并运行了一个新的菜单项,它就会被吸引进来:

我怎样才能让搜索消失?(或者更好的是,我怎样才能让它启动一个带有参数的网址,例如http://mywebsite.com/support?search=XXXXX)。
我正在尝试使用Swift 3以编程方式创建一个Cocoa GUI应用程序(即没有nib文件).我遇到了应用程序菜单显示的问题.
我希望下面的代码在菜单栏上显示File菜单项.相反,当窗口启动并按预期工作时,设置菜单的代码似乎没有任何效果:
import AppKit
final class ApplicationController: NSObject, NSApplicationDelegate {
var mainWindow: NSWindow?
func applicationDidFinishLaunching(_ aNotification: Notification) {
let mainMenu = NSMenu()
let mainMenuFileItem = NSMenuItem(title: "File", action: nil, keyEquivalent: "")
let fileMenu = NSMenu(title: "File")
fileMenu.addItem(withTitle: "New...", action: nil, keyEquivalent: "n")
mainMenuFileItem.submenu = fileMenu
mainMenu.addItem(mainMenuFileItem)
NSApp.mainMenu = mainMenu
let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 800, height: 600),
styleMask: [.titled, .closable, .resizable, .miniaturizable],
backing: NSBackingStoreType.buffered, defer: false)
window.orderFrontRegardless()
window.title = "Hello World"
self.mainWindow = window …Run Code Online (Sandbox Code Playgroud) nsmenu ×10
cocoa ×9
objective-c ×3
macos ×2
nsmenuitem ×2
nsview ×2
contextmenu ×1
macos-carbon ×1
menu ×1
nonblocking ×1
nsevent ×1
nsthread ×1
swift3 ×1