2009-03-15 4 views
1

Ich versuche, mehrere Ebenen der Hierarchie arbeiten mit Navigation Controllers. Ich habe 3 Ebenen der Hierarchie und Ich kann durch die Ebenen der Hierarchie nach unten bewegen, aber ich kann nur eine Ebene zurückgehen und nicht zwei Ebenen, zurück zum Start Ansicht.Mehrere Hierarchieebenen mit Navigation Controller

Ich beginne mit der Erstellung eines Navigationscontrollers für Ansicht 1 und drücke die nächste Ansicht, Ansicht 2, darauf. Dann füge ich den Navigationscontroller zur Untersicht des Fensters in didSelectRowAtIndexPath hinzu. Ein Klick auf eine Tabellenzeile in View # 1 bringt mich zur nächsten Hierarchieebene View # 2.

Die nächste Hierarchiestufe ist auch eine Tabellenansicht. Hier ist, wo Ich denke, das Problem auftritt. Ich erstelle einen anderen Navigationscontroller und drücke Ansicht Nr. 3 darauf in didSelectRowAtIndexPath in der Sicht Controller für Ansicht # 2. Wenn Sie auf eine Tabellenzeile in Ansicht # 2 klicken, wird angezeigt. Aber wenn ich den Zurück-Knopf benutze, um zu View # 2, zurückzukehren, gehe ich zurück zu einer leeren Ansicht und nicht zu der echten View # 2.

  1. Brauche ich eine Navigation-Controller nur 3 Ebenen der hiearchy statt zwei Navigationscontroller zu behandeln?

  2. Wenn # 1 ja ist, wie gehe ich dann an den Navigationscontroller, um den Controller von # 2 anzuzeigen, damit ich View # 3 auf den Navigationscontroller schieben kann?

  3. Oder muss ich alle drei Ansichten auf den Navigationscontroller in Ansicht # 1 schieben?

  4. Oder ...?

Vielen Dank im Voraus,

Jim

+0

Ich frage mich wirklich, wie man das gleiche in ios5 mit segues erreichen –

Antwort

1

in alle Hierarchie allgemeinen sollte in einem einzigen UINavigationController enthalten sein. Ich bin mir nicht sicher, ob das Verschachteln sogar unterstützt wird.

4

Die UIViewController wurde entwickelt, um Hand in Hand mit UINavigationController zu arbeiten. Wenn Sie eine neue Ansicht drücken, wird eine UINavigationController Referenzen auf sich selbst und auf eine UINavigationItem mit Metadaten über die Navigation (Zurück-Schaltfläche mit dem Titel der Ansicht dahinter etc ...) injizieren.

Im Allgemeinen möchten Sie Ihre UINavigationController mit Interface Builder initialisieren, indem Sie das Feld "NIB Name" verwenden, um den "root view controller" anzugeben (d. H. Die erste anzuzeigende Ansicht, die keine Schaltfläche zurück haben sollte).Das Äquivalent in Code sieht in etwa wie folgt aus:


UIViewController *rootController = [[UIViewController alloc] initWithNibName:@"RootController"]; 
UINavigationController *navCtl = [[UINavigationController alloc] initWithRootController:rootcontroller]; 

Dann, wenn Sie eine neue View-Controller (wahrscheinlich in Ihrem didSelectRowAtIndexPath Delegatmethode in Ihrem rootController) drücken müssen


SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController"]; 
[self.navigationController pushViewController:secondViewController]; 
[secondViewController release]; 

Beachten Sie, dass Sie didn‘ t muss die Eigenschaft self.navigationController erstellt werden, sie ist bereits in UIViewController definiert und wird abhängig vom aktuellen Status der Navigation mit der richtigen Referenz injiziert. Es funktioniert wie Magie!

+0

Danke für Ihre Antworten. Ich bin immer noch ein bisschen verwirrt. Sie haben * navCtl aber dann verwenden Sie self.navigationController. Sollte das self.navCtl sein? – user78158

+0

Das erste Code-Snippet wäre im Anwendungsdelegaten; Die zweite wäre im Root-View-Controller. –

4

Der DrillDownSave Beispielcode von der Website Apple Developer:

https://developer.apple.com/library/ios/#samplecode/DrillDownSave/

tut genau das, was ich für mit drei Hierarchieebenen Ansichten suchen die Navigation-Controller. Danke für deine Antworten.

Jim

+0

Der Link hier funktioniert nicht mehr. Es leitet auf den Index der iPhone verwandten Dokumente bei Apple um. –

+0

Hier ist ein Link: http://developer.apple.com/iphone/library/samplecode/DrillDownSave/ Auch die UINavigationBar-Klassenreferenz enthält Links zu drei anderen Beispielen. – progrmr

0

Wie würden Sie dies tun, wenn die nachfolgenden Ansichten zusätzliche Instanzen des gleichen Controller sind, dass eine wahre Hierarchie der nichts anderes als Tabellenansichten ist ... das Beispiel hartcodierte Ansichten zeigt ... aber sie machen im Wesentlichen dasselbe. Mein OO-Hintergrund sagt, wenn ich eine neue Instanz eines Controllers zuweisen/init, sollte ich nicht in der Lage sein, das zu drücken, dann habe ich seinen Zustand wiederhergestellt auf Pop (Zurück-Knopf)? Das scheint bei mir nicht zu funktionieren. Jede Instanz des Controllers (UITableViewController) hat seine eigene Instanz eines Arrays als seine Daten ...

+0

Sie sollten dies als eine separate Frage stellen. –