6
votes

ComboboxselectionDidchange me donne une valeur précédemment sélectionnée

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. xxx


0 commentaires

3 Réponses :


12
votes

J'ai eu la valeur sélectionnée à l'aide de:

NSString *strValue = [comboBox itemObjectValueAtIndex:[comboBox indexOfSelectedItem]];


2 commentaires

C'est étrange. Ceci est un punais d'apple


Extension Nscombobox {Func SélectionnéStringValue () -> String? {Retour Self.IntemobjectValue (à: Self.indexSelectedem) comme? String}}



1
votes

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);
}


0 commentaires

1
votes

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"]);



}


0 commentaires