显示主机菜单时更新NSMenuItem

时间:2011-06-10 02:22:22

标签: cocoa macos nsmenuitem

我有一个NSMenuItem我需要更新才能显示进度(就像Time机器的备份一样)。问题是当我在title上设置新NSMenuItemtitle没有变化时。

当我关闭并重新打开菜单时,它实际上正在改变,但我想在用户查看时更新它。

我也试过删除一个项目并重新插入它而没有结果。

任何指针?

1 个答案:

答案 0 :(得分:18)

如果更新代码在菜单跟踪期间使用的run loop mode中运行,那么这实际上无需额外工作。这是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];
}