2012-08-01 3 views
5

Ich möchte die .nib von "TableViewController" aufrufen, wenn auf meine UIToolBar geklickt wird. Aber unten erlaubt der Klick keine neue Ansicht. Wie behebe ich das? Bitte zeig mir wo ich schief gelaufen bin und was ersetzt werden sollte und warum.Wie man barbonnitem Aktion geben?

//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. 

Angenommen, Sie eine Spitze von einem barbuttonitem zu bringen waren, die auf einem UIToolbar Overlay ist. Wie würdest du es machen?

Mir wurde gesagt, dass ich hinzufügen muss, um es richtig zu funktionieren [barButtonItem addTarget: self action: @selector (doneButtonPressed) forControlEvents: UIControlEventTouchUpInside]; .

Aber wenn ich es hinzufügen, bekomme ich diese:

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

, die in mir führt einen Fehler bekommen „Instanzmethode Lesen‚- initWithBarButtonSystemItem: Ziel: Aktion: forControlEvents:‘nicht gefunden (Rückgabetyp ist standardmäßig ' id ') "

Anstatt mir nur den richtigen Zusatz zu zeigen, bitte zeigen Sie mir die Lösung zusätzlich zu dem Code, den ich hier geschrieben habe.

Antwort

5

Wenn Sie XCode 4 verwenden, können Sie einfach Strg + Ziehen Sie die BarButtonItem, in Ihre .h-Datei, und Sie können eine IB-Aktion von dort automatisch erstellen.

+0

Ich habe den barbuttonitem programmatisch gemacht, weil die Symbolleiste, auf der es sich befindet, programmgesteuert gemacht wurde, so dass IB nicht praktikabel ist. – Capricorn

1

Eine UIBarButtonItem folgt dem Standard UIControlEventTouchUpInside und Sie können es nicht einstellen. Xcode sollten die Methoden Auto-vorschlagen es für die Zuteilung, aber der richtige Code ist:

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

Hinweis, es gibt keine forControlEvents:.

+0

Was kann ich also vermuten, wenn die void-Methode nicht zu einer neuen Ansicht wechselt, obwohl ich sie nach Ihren Vorschlägen korrigiert habe? – Capricorn

+1

Setzen Sie zuerst einen Haltepunkt und sehen Sie, ob die Methode aufgerufen wird. Außerdem: '[self presentViewController: tableView animiert: YES completion: nil];' – runmad

1

diese Änderungen Versuchen:

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

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

das Ziel übergeben wird, um das Objekt, das die Aktion (das heißt die UIBarButtonItem selbst) initiiert

Zweitens einen Haltepunkt in Ihrer doneButtonPressed Funktion gesetzt. Wenn zum Beispiel die TableView auf Null gesetzt wird, wird nichts passieren. h., es gibt möglicherweise ein Problem beim Instanziieren dieses Ansichtssteuergeräts.

Verwandte Themen