【发布时间】:2011-02-17 23:28:09
【问题描述】:
我有一个弹出打开 NSMenu 的状态栏项目,我有一个委托集,并且连接正确(-(void)menuNeedsUpdate:(NSMenu *)menu 工作正常)。也就是说,该方法设置为在显示菜单之前调用,我需要监听它并触发异步请求,稍后在菜单打开时更新菜单,我不知道应该如何完成.
谢谢:)
编辑
好的,我现在在这里:
当您单击菜单项(在状态栏中)时,将调用一个运行 NSTask 的选择器。我使用通知中心来监听该任务何时完成,然后写道:
[[NSRunLoop currentRunLoop] performSelector:@selector(updateTheMenu:) target:self argument:statusBarMenu order:0 modes:[NSArray arrayWithObject:NSEventTrackingRunLoopMode]];
并且拥有:
- (void)updateTheMenu:(NSMenu*)menu {
NSMenuItem *mitm = [[NSMenuItem alloc] init];
[mitm setEnabled:NO];
[mitm setTitle:@"Bananas"];
[mitm setIndentationLevel:2];
[menu insertItem:mitm atIndex:2];
[mitm release];
}
这个方法肯定会被调用,因为如果我点击菜单外并立即返回到它,我会得到一个包含此信息的更新菜单。问题是它没有更新——当菜单打开时——。
【问题讨论】:
标签: objective-c cocoa statusbar nsmenu nsmenuitem