2010-12-01 12 views
1

Meine App hat zwei Unterscheidungsmodi. Im App-Delegaten befindet sich ein Tab-Controller. Es gibt zwei Registerkarten, die beide untergeordnete Ansichts-Controller verwenden. Die beiden View-Controller enthalten im Wesentlichen jeweils einen Nav-Controller. Die Nav-Controller haben ihren Root-View-Controller, und normalerweise, wenn ich Bildschirme ändere, drücke ich einfach die Controller des jeweiligen Nav-Controllers. Dies hat den (normalen) Effekt, dass die untere Tab-Leiste immer sichtbar ist, alles großartig und gut.Problem mit "Einen Controller modal innerhalb eines Nav-Controllers in einem Tab-Leiste-Controller präsentieren"

Diesmal möchte ich einen Bildschirm modal aber so präsentieren, dass der Benutzer nichts anderes tun kann, als die Seite mit zwei Buttons zu bestätigen oder abzubrechen, dh ich möchte auch die untere Tableiste ausblenden. Dies wäre ein Fall, um die Ansicht modal zu präsentieren, die ich dachte, aber die Ansicht wird innerhalb der Grenzen des Nav-Controllers angezeigt, so dass die untere Tab-Leiste immer noch sichtbar ist, und dies verursacht Verwirrung bei der Navigation der App. Ich bin mir nicht sicher, wie es möglich ist, dass die modal präsentierte Ansicht die Tab-Leiste nicht versteckt. Die meisten Fragen hier scheinen das Problem anders herum zu haben (eine modale Ansicht (falsch) darzustellen und die Tab-Leiste sichtbar zu lassen).

sind meine Versuche sind:

[self presentModalViewController:controller animated:YES]; // inside tab bar controller :-(
[self.tabBarController presentModalViewController:controller animated:YES]; // nothing is displayed. The new controller is instantly deallocated. 
[self.navigationController presentModalViewController:controller animated:YES]; // inside tab bar controller :-(

dieser Untersuchung ist die self.tabBarController tatsächlich gleich Null. Es scheint keine Verbindung zurück zu dem Tab-Bar-Controller zu geben ... Ich denke, um modal oben auf der Tab-Leiste anzuzeigen, muss ich einen Link zu diesem Tab-Leiste-Controller bekommen?

Antwort

1

Ich habe eine Lösung gefunden, ich bin mir nicht sicher, dass es koscher ist, weil ich irgendwie nicht in der Lage war, den self.tabBarController-Zeiger des View-Controllers zu verwenden, in dem ich den View-Controller-Aufruf starte.

Was ich getan habe, war für den App-Delegaten zu erreichen, der App-Delegat mit dem Tab-Leiste-Controller als eine öffentliche Eigenschaft definiert. Ich könnte diese Tab-Bar-Controller-Eigenschaft verwenden, um meinen View-Controller über alles auf dem Bildschirm modal anzuzeigen.

+0

Das ist die einzige Möglichkeit, die ich gefunden habe. Von dort können Sie die Unteransicht zum Fenster hinzufügen, anstatt direkt mit dem Tab-Bar-Controller zu arbeiten, da [window addSubview: yourModalViewController.view]; Wenn die Tableiste hinzugefügt wurde, wird sie eingefügt. –

+0

Vielleicht fange ich langsam an, es zu bekommen. Von oben gesehen ist meine Struktur: AppDelegate-> TabBarController-> ViewController-> NavController-> ViewController (+ ViewControllers modal präsentiert). Das Problem mit dieser Struktur sollte natürlich sein, NavControllers sollten nicht zu normalen ViewControllern hinzugefügt werden, wie im ersten Abschnitt unter http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CombiningViewControllers/CombiningViewControllers.html dokumentiert # // apple_ref/doc/uid/TP40007457-CH104-SW1 Ich denke, ich * sollte * NavBar Controller zum Tab Bar Set hinzufügen. – Jonny

Verwandte Themen