我有一个NSMenuItem
我需要更新以显示进度的东西(就像 Time machine 使用它的备份一样)。问题是当我设置一个新title
的NSMenuItem
并且title
没有改变时。
当我关闭并重新打开菜单时,它实际上正在发生变化,但我想在用户查看它时更新它。
我还尝试删除一个项目并重新插入它,但没有结果。
任何指针?
我有一个NSMenuItem
我需要更新以显示进度的东西(就像 Time machine 使用它的备份一样)。问题是当我设置一个新title
的NSMenuItem
并且title
没有改变时。
当我关闭并重新打开菜单时,它实际上正在发生变化,但我想在用户查看它时更新它。
我还尝试删除一个项目并重新插入它,但没有结果。
任何指针?
如果您的更新代码在菜单跟踪期间使用的运行循环模式下运行,这实际上不需要额外的努力。这是NSEventTrackingRunLoopMode
,但您可能只想使用NSRunLoopCommonModes
,以便在下拉菜单时菜单项标题正确。
下面是一个简单的菜单项示例,foo
它计算应用程序启动后的秒数:
- (void)doStuff;
{
static int i = 0;
[foo setTitle:[NSString stringWithFormat:@"%d", ++i]];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
{
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
[self methodSignatureForSelector:@selector(doStuff)]];
[invocation setTarget:self];
[invocation setSelector:@selector(doStuff)];
[[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES] forMode:NSRunLoopCommonModes];
}