Come ottenere nsccombobox in una barra nstrools per inviare messaggi a dati e delegati
-
28-10-2019 - |
Domanda
Ho un NSCOMBOBOX in una barra NSTool e voglio che la casella combinata invieda messaggi al suo dati da dati e delega.
La mia classe adotta il NSComboBoxDelegate
e NSComboBoxDataSource
protocolli. Creo la mia scatola combinata in questo modo
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];
Implego anche i seguenti metodi DataSource e delegati hanno avuto punti di rottura, ma nulla viene inviato a quei metodi.
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;
Qualche suggerimento su ciò che potrei fare di sbagliato? Grazie.
Soluzione
L'ho fatto funzionare creando la casella combinata in Interface Builder e quindi impostando la mia classe personalizzata come settimo posto nella cella della casella combinata e il delegato nella casella combinata. Invece di adottare NSComboBoxDataSource
, Ho adottato NSComboBoxCellDataSource
invece.
Non so perché il mio primo metodo non abbia funzionato, ma questo nuovo metodo sembra fare bene.