2012-03-07 13 views
6

He creado mi NSPopUpButton mediante programación con el siguiente códigosetAction para NSPopUpButton es incapacitante mi 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"); 
} 

Cuando pulso en el popUpButton, elementos de menú de popUpButton están desactivados. Cuando uso interfacebuilder, simplemente funciona bien con IBAction.

¿Por qué este setAction no funciona para NSPopUpButton?

Respuesta

12

Parece que no está configurando un objeto objetivo para enviar el mensaje. Por lo tanto, en el código, añadir:

[myPopUpButton setTarget:self]; 

asumiendo el método popUpAction: está en la misma clase.

Cuando está utilizando Interface Builder, está conectando la acción del selector al destino.

De la documentación para esta llamada:

- (void)setTarget:(id)anObject

Si unObjeto es nil pero el control todavía tiene un mensaje de acción válida asignada, la aplicación sigue la cadena de respuesta en busca de un objeto que puede responder al mensaje.

En su caso, no hay ningún objeto responder al mensaje.

2

Incluso si myPopUpButton tiene un objetivo y la acción, también podría ser necesario añadir que ver:

[myPopUpButton setAutoenablesItems:NO]; 

De lo contrario, cada vez que se hace clic en el botón, se puede desactivar automáticamente todos los elementos en su menú. (Me doy cuenta de que esta pregunta es antigua, pero publicar esta solución en caso de que ayude a otros).

Cuestiones relacionadas