Почему элемент NSPopupButton исчезает? - PullRequest
0 голосов
/ 06 января 2012

У меня есть NSPopupButton, индекс выбора которого привязан к свойству в подклассе NSWindowController. В IB кнопка начинается с пары пунктов. Значение свойства берется из NSUserDefaults и может быть больше, чем количество элементов в NSPopupButton при его первом создании. Это приводит к вставке пустого элемента в конец списка. Если я добавляю элементы к кнопке, автоматически созданный пустой элемент все еще там. Но когда я делаю выбор, он исчезает. Если я изменю название пустого элемента перед выбором, элемент все равно исчезнет.

Я перевел проблему к этому коду:

@interface PopUpWindowController : NSWindowController {
    NSUInteger popUpValue;

    IBOutlet NSPopUpButton *popUp;
}

@property NSUInteger popUpValue; //popUp's Selected Index is bound to this property

-(IBAction)addItemsToPopUp:(id)sender;
-(IBAction)nameBlankItem:(id)sender;

@end


@implementation PopUpWindowController

@synthesize popUpValue;

-(id)init {
    if (self = [super initWithWindowNibName:@"PopUpWindow"]) {
        popUpValue = 5; //In my real program this comes from NSUserDefaults
    }
    return self;
}

-(IBAction)addItemsToPopUp:(id)sender {
    //Add three items to popUp
    NSUInteger lastNewItem = [popUp numberOfItems] + 3;
    for (NSUInteger newItem = [popUp numberOfItems]; newItem < lastNewItem; newItem++) {
        [popUp addItemWithTitle:[NSString stringWithFormat:@"%d", newItem + 1]];
    }
    self.popUpValue = 5;
}

-(IBAction)nameBlankItem:(id)sender {
    NSArray *items = [popUp itemArray];
    for (NSUInteger i = 0; i < [items count]; i++) {
        if (![[[items objectAtIndex:i] title] length]) {
            //item title is blank so set it to the item number
            [[items objectAtIndex:i] setTitle:[NSString stringWithFormat:@"%d", i + 1]];
        }
    }
}

@end

Вот всплывающее меню, когда окно появляется впервые (в IB есть три элемента с именами «1», «2» и «3»):

menu v1

Вот после звонка addItemsToPopUp:

menu v2

Вот после звонка nameBlankItem:

menu v3

Затем я снова позвонил addItemsToPopUp::

menu v4

Теперь я, наконец, сделаю выбор и снова всплываю меню:

menu v5

Куда ушел * 1034?

В моей настоящей программе я хочу, чтобы пункты меню были "1" .. "n" (n определяется числом элементов в вычисленном NSArray). Я открыт для альтернативных подходов, но я надеюсь, что решение продолжает использовать NSPopupButton.

(В случае, если это имеет значение, я использую Xcode 3.1.2 под OS X 10.5.8, но также тестировал с Xcode 3.2 под OS X 10.6.8.)

1 Ответ

0 голосов
/ 08 января 2012

Я решил проблему, связав свойство Content Values ​​объекта NSPopUpButton с массивом в моем объекте.Поэтому вместо того, чтобы вручную манипулировать массивом элементов кнопки в сочетании с тем, что Какао делает за кулисами, я полностью контролирую содержимое.

...