Обновите NSMenuItem, пока отображается главное меню - PullRequest
14 голосов
/ 10 июня 2011

У меня есть NSMenuItem, который мне нужно обновить, чтобы показать прогресс (как Time Machine делает с резервной копией). Проблема в том, что когда я устанавливаю новый title для этого NSMenuItem, а title не меняется.

Фактически оно меняется, когда я закрываю и снова открываю меню, но я хочу обновить его, пока пользователь смотрит на него.

Я также пытался удалить элемент и вставить его снова безрезультатно.

Есть указатели?

1 Ответ

18 голосов
/ 10 июня 2011

Это фактически работает без дополнительных усилий, если ваш код обновления работает в режиме run loop , который используется во время отслеживания меню. Это 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...