2013-07-31 3 views
6

Sto cercando di personalizzare la barra di navigazione aggiungendo un pulsante personalizzato a destraBarButtonItem. La creazione di uno è abbastanza semplice.Aggiunta di azioni e target a un oggetto di navigazione personalizzato BarButtonItem?

UIImage *myImage = [UIImage imageNamed:@"menu-icon.png"]; 

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[myButton setFrame:CGRectMake(0, 0, myImage.size.width, myImage.size.height)]; 
[myButton setBackgroundImage:myImage forState:UIControlStateNormal]; 

UIBarButtonItem *myButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 

[navItem setLeftBarButtonItem:myButtonItem animated:YES]; 

sembra buono, solo che adesso non riesco a impostare le proprietà di destinazione o di azione. Il seguente codice non fa nulla:

myButtonItem.target = myTarget; 
myButtonItem.action = @selector(myButtonAction); 

ho trovato che la ragione non funziona è perché ho inizializzato l'UIBarButtonItem con -initWithCustomView. La documentazione delle mele dice:

L'elemento del pulsante di barra creato da questo metodo non chiama il metodo di azione del suo target in risposta alle interazioni dell'utente. Invece, l'elemento del pulsante di barra si aspetta la vista personalizzata specificata per gestire qualsiasi interazione dell'utente e fornire una risposta appropriata.

Sono un po 'confuso da cosa esattamente Apple significhi. Dovrei creare un controllo personalizzato o qualcosa del genere? Non l'ho ancora fatto e non sono sicuro da dove cominciare.

Qualcuno ha qualche suggerimento su come fare questo o un modo alternativo per impostare un pulsante personalizzato della barra di navigazione?

RISPOSTA -------------------------------------------- --------------

solo dovuto aggiungere questo metodo alla UIButton:

[myButton addTarget:myTarget action:@selector(myButtonAction) forControlEvents:UIControlEventTouchUpInside]; 

risposta

6

È piuttosto semplice, è necessario aggiungere target per uibutton non per uibarbuttonitem.

Per spiegare più ciò che vuoi per UIBarButtonItem è rispondere tocco dentro metodo di azione, come documentazione dice che è necessario farlo per UIButton come si sta inizializzazione del UIBarButtonItem con visualizzazione personalizzata nel tuo caso UIButton.

+0

Grazie, non sapevo che era così semplice. – DJSK

4

Aggiungere un'azione e di destinazione per un UIButton come questo:

[myButton addTarget:self 
      action:@selector(handleMyButtonTap) 
    forControlEvents:UIControlEventTouchUpInside];

Aggiungi un'azione e target a un UIBarButtonItem come questo:

[myBarButtonItem setAction:@selector(handleBarButtonTap)]; 
[myBarButtonItem setTarget:aTarget];
+0

Non ha funzionato con myButtonItem ma quando l'ho aggiunto a myButton ha funzionato! Grazie! – DJSK

0

Con l'aiuto di risposte da hgwhittle e Mustafa ho implementato e funziona perfetto qui è l'insulsa completo può aiutare qualcuno

 //Create ImageButton 
     UIImage *shareBtnIcon = [UIImage imageNamed:@"dummy_share_icon_22"]; 

     UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [shareButton setFrame:CGRectMake(0, 0, shareBtnIcon.size.width, shareBtnIcon.size.height)]; 
     [shareButton setBackgroundImage:shareBtnIcon forState:UIControlStateNormal]; 

     [shareButton addTarget:self action:@selector(shareButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

     //Create BarButton using ImageButton 
     UIBarButtonItem *shareBarBtn = [[UIBarButtonItem alloc] initWithCustomView:shareButton]; 

     //Add BarButton to NavigationBar 
     self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects:shareBarBtn, nil]; 

//method for share butto click 
-(void) shareButtonClicked:(UIButton*)sender 
{ 
    NSLog(@"you clicked on share button %ld"); 
}