2012-03-07 2 views
6

Я создал свой NSPopUpButton программно с помощью следующего кодаSetAction для NSPopUpButton является отключение моего PopUpButton

[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?

ответ

12

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

[myPopUpButton setTarget:self]; 

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

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

Из документации для этого вызова:

- (void)setTarget:(id)anObject

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

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

2

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

[myPopUpButton setAutoenablesItems:NO]; 

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

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

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