J'utilise cette notification pour NSCOMBOBOX. Seul problème est que lorsque je sélectionne un élément différent de la liste déroulante, il affiche toujours la valeur précédemment sélectionnée dans la liste déroulante. Comment puis-je obtenir la valeur actuellement sélectionnée? Je dois faire valoir des contrôles / désactiver en fonction de la valeur.
3 Réponses :
J'ai eu la valeur sélectionnée à l'aide de:
NSString *strValue = [comboBox itemObjectValueAtIndex:[comboBox indexOfSelectedItem]];
C'est étrange. Ceci est un punais d'apple
Extension Nscombobox {Func SélectionnéStringValue () -> String? {Retour Self.IntemobjectValue (à: Self.indexSelectedem) comme? String}} code>
J'ai également remarqué ce bogue et j'ai réparé de manière différente. La valeur correcte peut être récupérée lorsque nous lisons la valeur dans la prochaine exécution de la boucle d'exécution principale après l'appel de la méthode ComboboxSelectionDidDidDidChanger comme indiqué ci-dessous
- (void)comboBoxSelectionDidChange:(NSNotification *)notification{ [self performSelector:@selector(readComboValue:) withObject:[notification object] afterDelay:0]; } - (void)readComboValue:(id)object { NSString *comboValue = [(NSComboBox *)object stringValue]; NSLog(@"%@", comboValue); }
J'utilise ce code avec succès!
Configuration: P>
@interface YourWindowController : NSWindowController<NSComboBoxDelegate,NSComboBoxDataSource> - (void)windowDidLoad { comboBox.usesDataSource = YES; comboBox.datasource = self; comboBox.delegate = self; [comboBox selectItemAtIndex:0]; } -(void)comboBoxSelectionDidChange:(NSNotification *)notification { NSLog(@"Selection = %@ ",[[array objectAtIndex: (long)[comboBox indexOfSelectedItem]] objectForKey:@"yourkey"]); }