Как заставить элемент строки меню отображать количество строк в таблице?

У меня есть основная таблица данных, и я хотел бы, чтобы в строке меню отображалось количество строк в таблице. Я уже создал элемент строки меню, используя этот код:

 -(void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
NSStatusItem *statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain]; //Create new status item instance
[statusItem setHighlightMode:YES]; //This does something, I'm sure of it.
[statusItem setTitle:[NSString stringWithFormat:@"%C",0xff50]]; //This labels it. You can also use setImage instead to use an icon. That current code will result in a item labeled "p"
[statusItem setEnabled:YES]; //Self explanatory
[statusItem setMenu:theMenu];
[statusItem setToolTip:@"TOOLTIP HA AWESOME AMIRITE?"]; //Optional, just for kicks.
}

Что мне нужно добавить, чтобы элемент строки меню отображал количество строк в таблице?


person Joshua    schedule 05.05.2009    source источник


Ответы (1)


Если вам не требуется обновление в реальном времени, вы можете попробовать этот подход:

1) установить делегат theMenu:

[theMenu setDelegate:self];

2) и реализовать метод делегата:

- (void)menuWillOpen:(NSMenu *)menu {
    NSUInteger count = [self.tableView numberOfRows];
    [[menu itemAtIndex:0] setTitle: [NSString stringWithFormat:@"%d rows", count]];
}

Этот код будет обновлять элемент меню каждый раз, когда пользователь открывает меню. Если вы хотите обновлять его каждый раз, когда что-то изменяется в таблице, вам нужно будет использовать KVO для наблюдения за контроллером массива. Вам также нужно будет использовать KVO, если вы хотите отобразить количество в заголовке StatusItem.

person Markus Müller-Simhofer    schedule 05.05.2009
comment
Просто для подтверждения это будет отображать количество строк в строке меню в верхней части экрана, а не в раскрывающемся меню. Правильно? - person Joshua; 05.05.2009
comment
# 1 Вероятно, в тот же контроллер, который управляет вашим элементом состояния. # 2 Он будет отображаться в пункте меню, когда вы нажимаете на элемент статуса. Если вы хотите изменить заголовок элемента состояния, вероятно, лучше всего зарегистрироваться в качестве наблюдателя контроллера массива (я думаю, в этом случае должны работать аранжированныеобъекты) и установить заголовок в методеObservValueForKeyPath:ofObject:change:context:. - person Markus Müller-Simhofer; 05.05.2009
comment
Хорошо, спасибо, а какой код мне использовать, чтобы изменить заголовок элемента статуса? - person Joshua; 06.05.2009