Как получить NSComboBox в NSToolbar для отправки сообщений на источник данных и делегировать - PullRequest
3 голосов
/ 02 февраля 2011

У меня есть NSComboBox в NSToolbar, и я хочу, чтобы поле со списком отправляло сообщения на его источник данных и делегировал.

Мой класс принимает протоколы NSComboBoxDelegate и NSComboBoxDataSource.Я создаю свое поле со списком следующим образом:

    NSRect comboBoxRect = NSMakeRect(0, 0, 175, 20);
    NSComboBox *sourceComboBox = [[NSComboBox alloc] initWithFrame:comboBoxRect];
    [sourceComboBox setDataSource:self];
    [sourceComboBox setDelegate:self];
    [sourceComboBox setUsesDataSource:YES];
    [sourceComboBox setEditable:NO];

    NSToolbarItem *sourceComboBoxItem = [[NSToobarItem alloc] initWithItemIdentifier:@"MyID"];
    [sourceComboBoxItem setView:sourceComboBox];
    [sourceComboBoxItem setMinSize:NSMakeSize(175*1.2, SEGMENT_HEIGHT)];
    [sourceComboBoxItem setMaxSize:NSMakeSize(175*1.2, SEGMENT_HEIGHT)];
    [sourceComboBoxItem setDelegate:self];
    [sourceComboBoxItem setTag:4];

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

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

Любые предложения о том, что я могу делать не так?Спасибо.

1 Ответ

1 голос
/ 02 февраля 2011

Я заставил его работать, создав поле со списком в Интерфейсном Разработчике, а затем установив мой пользовательский класс в качестве источника данных для ячейки поля со списком и делегата для поля со списком.Вместо принятия NSComboBoxDataSource я принял вместо NSComboBoxCellDataSource.

Я не знаю, почему мой первый метод не сработал, но этот новый метод, похоже, отлично работает.

...