Кнопка NSPopUp не выбрана правильно

Я использую этот код, чтобы добавить всплывающую кнопку NSView:

if (popupButton) [popupButton release];
popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, SHEET_WIDTH/2, 32) pullsDown:true];
NSMenu *menu = [[NSMenu alloc] init];
for (NSString *title in anArray)
    [menu addItemWithTitle:title action:NULL keyEquivalent:@""];
[popupButton setMenu:menu];
[self addView:popupButton aligned:KOAlignmentCenter];

Когда я запускаю свое приложение, кнопка не имеет выбора. Когда пользователь нажимает на него и выбирает один из элементов, кнопка остается пустой. Например, если есть 3 возможных выбора (item1, item2 и item3), и пользователь нажимает второй, вместо того, чтобы показывать item2, он ничего не показывает:

пустой выбор

1 ответ

Решение

Я не знаю, почему у вас ничего не появляется, потому что, когда я попробовал ваш код, у меня действительно появился первый элемент в массиве ArArray. Тем не менее, выбор элемента из списка не меняет того, что отображается, и это ожидаемое поведение для кнопки типа раскрывающегося списка. Из документов Apple:

Выпадающие списки, как правило, отображаются рядом с всплывающей кнопкой так же, как подменю отображается рядом с родительским элементом. В отличие от всплывающих списков, заголовок всплывающей кнопки, отображающей раскрывающийся список, не основан на текущем выбранном элементе и, таким образом, остается фиксированным, если вы не измените его с помощью метода setTitle: ячейки.

Вам также не нужен ни один из операторов меню, вы можете просто использовать метод NSPopupButton addItemWithTitle:, в вашем цикле. Так что попробуйте это без команд меню, и используйте setTitle: явно, если вы все еще не получаете ничего, что первоначально показывалось. Или вы можете перейти к всплывающему окну вместо раскрывающегося списка, тогда у вас не будет проблем с установкой заголовка.

Вот что я сделал, чтобы проверить:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    NSArray *anArray = @[@"One",@"Two",@"Three",@"Four"];
    _popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(100, 200, 200, 32) pullsDown:TRUE];
    for (NSString *title in anArray)
        [_popupButton addItemWithTitle:title];
    [self.window.contentView addSubview:_popupButton];
}
Другие вопросы по тегам