Comment faire envoyer NSComboBox dans un nstoolbar pour envoyer des messages à la source de données et déléguer
-
28-10-2019 - |
Question
J'ai un nscomboBox dans un nstoolbar et je veux que la boîte combinée envoie des messages à sa source de données et à son délégué.
Ma classe adopte le NSComboBoxDelegate
et NSComboBoxDataSource
protocoles. Je crée ma boîte combo comme celle-ci
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];
J'implémente également les méthodes de données de données et de délégués suivantes contenant des points de rupture, mais rien n'est envoyé à ces méthodes.
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;
Des suggestions sur ce que je peux faire de mal? Merci.
La solution
Je l'ai fait fonctionner en créant la boîte combinée dans Interface Builder, puis en définissant ma classe personnalisée comme source de données sur la cellule de la boîte combinée et le délégué à la boîte combinée. Au lieu d'adopter NSComboBoxDataSource
, J'ai adopté NSComboBoxCellDataSource
Au lieu.
Je ne sais pas pourquoi ma première méthode n'a pas fonctionné, mais cette nouvelle méthode semble faire le très bien.