Обновите NSMenuItem, пока отображается главное меню
У меня есть NSMenuItem
что мне нужно обновить, чтобы показать прогресс (как Time Machine делает с его резервной копией). Проблема в том, что когда я устанавливаю новый title
на что NSMenuItem
и title
не меняется
На самом деле оно меняется, когда я закрываю и снова открываю меню, но я хочу обновить его, пока пользователь смотрит на него.
Я также попытался удалить элемент и повторно вставить его безрезультатно.
Есть указатели?
1 ответ
Это на самом деле работает без дополнительных усилий, если ваш код обновления работает в режиме цикла выполнения, который используется во время отслеживания меню. Это 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];
}