如何解决显示主机菜单时更新NSMenuItem
| 我需要更新“ 0”以显示进度(例如Time Machine对其进行备份)。问题是当我在那个NSMenuItem
上设置一个新的title
时,the1并没有改变。
实际上,当我关闭并重新打开菜单时,它正在更改,但是我想在用户查看菜单时对其进行更新。
我也尝试删除一个项目并重新插入它,但没有结果。
有指针吗?
解决方法
如果您的更新代码在菜单跟踪期间使用的运行循环模式下运行,则实际上无需花费额外的精力。这是
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];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。