2009-03-19 13 views
0

Ich bin in eine interessante Situation geraten, ich habe eine iPhone App mit 3 UITableViewController s jede mehr oder weniger die gleichen Daten (Sie können sagen, es ist eine Frage der Filterung). Bis heute hatte ich 3 separate NIBs dafür, jedes mit seinem eigenen Controller, zusätzlich waren die UITableViewController s innerhalb UINavigationController wegen der Tasten an der Spitze.UITableViewController mit UITabBarController wird nicht angezeigt

Jetzt, um die App zu optimieren und ihren Platzbedarf zu reduzieren, packe ich die gesamte Logik auf einen gemeinsamen Controller (ein UITableViewController) und ließ nur eine NIB an Ort und Stelle. Der gemeinsame Controller würde sich darum kümmern, die Daten herauszufiltern und auf die korrekten Daten zu zeigen.

Also, lade ich die gleichen gemeinsamen Controller 3 der Navigation-Controller:

navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController]; 

und hinzugefügt, um diese Navigationscontroller zum UITabBarController:

navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil]; 
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]]; 

alle jetzt in Ordnung ist, die Tabs anzeigen, erscheinen die Tabellenansichten. Aber sobald Sie den nächsten UITabBarItem berühren und zum vorherigen zurückgehen, wird der UITableViewController nicht angezeigt, Sie können nur einen UIWindow in seinem Platz sehen. Die UITableViewController bleibt nur für die zuletzt berührte UITabBarItem sichtbar.

Gibt es eine Art von UITabBar Ansicht Lademechanismus Ich bin mir nicht bewusst?

Antwort

1

Jeder View-Controller kann sich nur auf dem Stack eines Navigations-Controllers befinden und nicht an mehreren Stellen auf diesem Stack.

Wenn Sie wirklich Speicher sparen möchten, indem Sie nur einen Ansichtscontroller verwenden, würde ich vorschlagen, anstelle eines Tab-Bar-Controllers nur eine Tab-Leiste-Ansicht zu verwenden und Ihren Root-Ansicht-Controller als seinen Delegaten festzulegen. Der Root-View-Controller würde dann Tab-Bar-Ereignisse direkt interpretieren und seine Filterung entsprechend ändern.

0

Wenn Sie wirklich Datensätze innerhalb einer Ansicht umschalten möchten, scheint es eine bessere Methode zu sein, eine Symbolleiste als eine Tab-Leiste zu verwenden. In der Tableiste dreht sich alles um das Wechseln von Ansichten. Wie das andere Plakat bemerkt, müssen alle Ansichten Kinder einer Ansicht und eines Navigationscontrollers sein. Es ist viel sinnvoller, eine Tab-Leiste zu verwenden, die in diesen einzelnen Controller wechselt, um zwischen den Datensätzen zu wechseln, oder die Verwendung eines UISegmentedControls funktioniert ebenfalls gut (da Sie drei Elemente haben und nur bis zu drei Segmente haben können).

0

Die Verwendung von UITabbarController innerhalb von UINavigationController wird nicht unterstützt. Sie können einen normalen UIViewController schreiben, um den UITabbbarController nachzuahmen, der zum Anzeigen des Stacks verschoben werden kann. Siehe hierzu SO question.

Verwandte Themen