2012-08-01 10 views
5

Desidero richiamare il .nib di "TableViewController" quando si fa clic sul pulsante Fine sul mio UIToolBar. Ma il sotto non permette al click di far apparire una nuova vista. Come posso rettificare questo? Per favore mostrami dove sono andato storto e cosa dovrebbe essere sostituito e perché.Come dare l'azione barbuttonitem?

//Here's the selector in my overlay. 
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)]; 

//Here's how I made my action. Btw, the uitoolbar has no nib, it's an overlay on the 
//(camera mode). 

-(void)doneButtonPressed { 
TableViewController *tableView = [[TableViewController alloc] 
initWithNibName:@"TableViewController" bundle:nil]; 
tableView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentModalViewController:tableView animated:YES]; 
} 


//Yet nothing happens when I click on my done button on my overlay. And I've made sure 
// i've imported .h frameworks correctly too. 

Supponiamo si dovesse aprire un pennino da un barbuttonitem che si trova su una sovrapposizione UIToolbar. Come lo faresti?

Mi è stato detto che per farlo funzionare correttamente dovrei aggiungere [barButtonItem addTarget: self action: @selector (doneButtonPressed) forControlEvents: UIControlEventTouchUpInside]; .

Ma se lo aggiungo ottengo questo:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
UIBarButtonSystemItemDone addTarget:self action:@selector(doneButtonPressed) 
forControlEvents:UIControlEventTouchUpInside]; 

che si traduce in me sempre un errore di lettura "metodo di istanza '- initWithBarButtonSystemItem: target: Azione: forControlEvents:' non trovati (Tipo di ritorno default ' id ') "

Invece di mostrarmi solo l'additivo corretto, per favore mostrami la soluzione oltre al codice che ho scritto qui.

risposta

5

Se si utilizza XCode 4, è sufficiente Ctrl + Trascinare il BarButtonItem nel file .h e creare automaticamente un'azione IB da lì.

+0

Ho eseguito il barbuttonitem a livello di codice perché la barra degli strumenti su cui si trova è stata creata a livello di codice, pertanto l'utilizzo di IB non è fattibile. – Capricorn

1

A UIBarButtonItem segue il valore predefinito UIControlEventTouchUpInside e non è possibile impostarlo. Xcode dovrebbe suggerimento automatico dei metodi di assegnazione, ma il codice corretto è:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)]; 

Nota, non c'è forControlEvents:.

+0

Quindi, cosa dovrei sospettare se il metodo void non esegue il passaggio a una nuova vista anche dopo che l'ho rettificato secondo i vostri suggerimenti? – Capricorn

+1

Prima di tutto, imposta un punto di interruzione e verifica se il metodo viene chiamato. Inoltre: '[auto presentViewController: tableView animato: SÌ completamento: nil];' – runmad

1

Prova queste modifiche:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)]; 

-(void)doneButtonPressed:(id)sender 
{ 
} 

il bersaglio viene passato l'oggetto che ha avviato l'azione (cioè la stessa UIBarButtonItem)

secondo luogo, imposta un punto nella funzione doneButtonPressed. Se, ad esempio, tableView viene impostato su zero, non vedrai accadere nulla. forse c'è un problema con la creazione di istanze di questo controller di visualizzazione.

Problemi correlati