comboBoxSelectionDidChange дает мне ранее выбранное значение - PullRequest
4 голосов
/ 10 марта 2011

Я использую это уведомление для NSComboBox.Единственная проблема заключается в том, что когда я выбираю другой элемент в раскрывающемся списке, он всегда показывает ранее выбранное значение в поле со списком.Как я могу получить текущее выбранное значение.Мне нужно сделать некоторые элементы управления включить / отключить в зависимости от значения.

- (void)comboBoxSelectionDidChange:(NSNotification *)notification {
        NSComboBox *comboBox = (NSComboBox *)[notification object];

        NSLog(@"[comboBox stringValue] : %@", [salaryBy stringValue] );
}

Ответы [ 3 ]

8 голосов
/ 19 апреля 2011

Я получил выбранное значение, используя:

NSString *strValue = [comboBox itemObjectValueAtIndex:[comboBox indexOfSelectedItem]];
1 голос
/ 10 мая 2014

Я успешно использую этот код!

Настройка:

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



}

Надеюсь, эта помощь.

1 голос
/ 11 января 2014

Я также заметил эту ошибку и по-другому ее исправил. Правильное значение может быть получено, когда мы читаем значение в следующем цикле основного цикла выполнения после вызова метода comboBoxSelectionDidChange, как показано ниже

- (void)comboBoxSelectionDidChange:(NSNotification *)notification{ 

    [self performSelector:@selector(readComboValue:) withObject:[notification object] afterDelay:0];
}

- (void)readComboValue:(id)object
{
   NSString *comboValue = [(NSComboBox *)object stringValue];
   NSLog(@"%@", comboValue);
}

дает желаемый результат

...