SetAction для NSPopUpButton отключает мой popUpButton - PullRequest
7 голосов
/ 07 марта 2012

Я создал свой NSPopUpButton программно со следующим кодом

[myPopUpButton insertItemWithTitle:@"--Select one--" atIndex:0];
[myPopUpButton addItemsWithTitles:[NSArray arrayWithObjects:@"1.One",@"Two",@"Three", nil]];

[myPopUpButton sizeToFit];
[myPopUpButton  setAction:@selector(popUpAction:)];
[fullBrowserView addSubview: myPopUpButton];

//PopUp Action
-(void)popUpAction:(id)sender
{
    NSLog(@"popUpAction");
}

Когда я нажимаю popUpButton, пункты меню popUpButton отключаются. Когда я использую интерфейсный конструктор, он просто отлично работает с IBAction.

Почему этот setAction не работает для NSPopUpButton?

Ответы [ 2 ]

13 голосов
/ 07 марта 2012

Похоже, вы не устанавливаете объект target для отправки сообщения. Итак, в коде добавьте:

[myPopUpButton setTarget:self];

при условии, что метод popUpAction: находится в том же классе.

Когда вы используете Interface Builder, он подключает действие селектора к цели.

Из документации по этому звонку:

- (void)setTarget:(id)anObject

Если anObject равен nil, но элементу управления по-прежнему назначено действительное сообщение о действии, приложение следует цепочке респондента в поисках объекта, который может ответить на сообщение.

В вашем случае нет объекта , отвечающего на сообщение.

5 голосов
/ 07 июля 2016

Даже если у myPopUpButton есть цель и действие, вам также может понадобиться добавить:

[myPopUpButton setAutoenablesItems:NO];

В противном случае, при каждом нажатии кнопки он может автоматически отключить все элементы в своем меню. (Я понимаю, что этот вопрос старый, но выкладываю это решение на тот случай, если оно поможет другим).

...