Comment faire envoyer NSComboBox dans un nstoolbar pour envoyer des messages à la source de données et déléguer

StackOverflow https://stackoverflow.com/questions/4868722

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top