2016-03-10 9 views
0

Я создаю пользовательский интерфейс с использованием NSPopUpButton, передавая ему массив строк и выбирая элемент по индексу. Когда это будет показано, по умолчанию используется первый элемент. Может ли кто-нибудь увидеть то, что мне не хватает? DropDownView расширяет NSView.(Objective C) NSPopUpButton не обновляет отображаемое значение

@implementation DropDownView 

- (id)initWithFrame: (NSRect)frameRect 
      values: (NSArray<NSString*>*) vals 
      current: (NSInteger) currentIndex 
{ 
    [super initWithFrame:frameRect]; 
    menu = [[NSPopUpButton alloc]initWithFrame:frameRect pullsDown:NO]; 

    [menu addItemsWithTitles:vals]; 

    [menu setEnabled:true]; 

    // this does not change the currently displayed value 
    // have tried various combinations of the below 
    [menu selectItemAtIndex:currentIndex]; 
    // [menu selectItemWithTitle:vals[currentIndex]]; 
    [menu synchronizeTitleAndSelectedItem]; 

    [self addSubview:menu]; 

    [menu bind:@"selectedIndex" toObject:self withKeyPath:@"indexOfSelectedItem" options:nil]; 

    return self; 
} 
@end 

большое спасибо!

+0

вызывает 'addSubview:' сразу после '[[NSPopUpButton alloc] initWithFrame: frameRect pullsDown: NO];' и до 'selectItemAtIndex:' помогло? –

+0

Не должно быть первого утверждения: 'self = [super initWithFrame: frameRect];' следует 'if (self) {'.? – Willeke

ответ

1

При связывании selectedIndex в меню selectedIndex установлено значение self.indexOfSelectedItem. Не вызывайте selectItemAtIndex и synchronizeTitleAndSelectedItem и установите indexOfSelectedItem в currentIndex.

+0

спасибо, моя глупая ошибка. думаю, что проблема связана. избавились от вызовов меню и вместо этого просто изменили значение привязки после того, как оно было привязано с помощью наборов kvo, сделало его работающим, как ожидалось. – alwaysmpe

 Смежные вопросы

  • Нет связанных вопросов^_^