2011-10-10 21 views
14

Soy un novato de iOS. Tengo un botón de barra de navegación que, al hacer clic, debería ejecutar una función propia. ¿Cuál es la mejor manera de hacer eso?Agregar un selector personalizado a un UIBarButtonItem

UIBarButtonItem *doneBarButtonItem=[[UIBarButtonItem alloc] init]; 
[email protected]"Done"; 
self.navigationItem.rightBarButtonItem = doneBarButtonItem; 
[doneBarButtonItem release]; 

Respuesta

42

Una forma es iniciar con el objetivo y la acción:

UIBarButtonItem *buttonHello = [[UIBarButtonItem alloc] initWithTitle:@"Say Hello"  
    style:UIBarButtonItemStyleBordered target:self action:@selector(sayHello:)]; 

Otra forma es fijar el objetivo y acción después de lo creó

[buttonHello setTarget:self]; 
[buttonHello setAction:@selector(sayHello:)]; 

objetivo es la instancia de el objeto que será llamado. En el caso de uno mismo, el método estará en esta instancia del objeto.

Acción es el método que se llamará. Normalmente, lo decora con IBAction para indicarle al diseñador que se trata de una acción. Se compila para anular.

- (IBAction)sayHello:(id)sender 
{ 
    // code here 
} 
+0

Gracias por '[buttonHello setTarget: self];' y '[buttonHello setAction: @selector (sayHello :)];' ... ¡esto me salvó! – Greg

+0

Gracias por esta respuesta bellamente escrita, Bryan; ¿hay alguna posibilidad de que reescribas el resto de la documentación API de Apple de esta manera? ;-) – Slowburner

2

Hay una variedad de diferentes llamadas de inicialización se pueden utilizar, que se enumeran en la sección Métodos de instancia aquí:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIBarButtonItem_Class/Reference/Reference.html

- (id)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(id)target action:(SEL)action 
- (id)initWithCustomView:(UIView *)customView 
- (id)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action 
- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action 

También, se puede extraer una muestra en uso aquí :

How to set target and action for UIBarButtonItem at runtime

Espero que esto ayude!

Cuestiones relacionadas