Ich versuche, eine Benutzeroberfläche zu implementieren, die wie in der Tweetie- App strukturiert ist und sich so verhält: Der Ansichts-Controller der obersten Ebene scheint ein Navigations-Controller zu sein, dessen Stammansicht eine Tabellenansicht "Konten" ist. Wenn Sie auf ein Konto klicken, wird die zweite Ebene mit einer Registerkartenleiste im unteren Bereich aufgerufen. Jedes Registerkartenelement zeigt eine andere Liste an und ermöglicht einen weiteren Drilldown (in den folgenden Ebenen wird die Registerkartenleiste nicht angezeigt).
Dies scheint also die Implementierungshierarchie zu sein:
UINavigationController
- Konten :
UITableViewController
UITabBarController
- Tweets :
UITableViewController
- Detailansicht eines Tweets / Benutzers / etc.
- Antworten :
UITableViewController
- ...
- Tweets :
- Konten :
Dies scheint zu funktionieren [^ 1], scheint jedoch gemäß der SDK-Dokumentation für -pushViewController:animated:
(Hervorhebung hinzugefügt) nicht unterstützt zu werden:
viewController : Der View Controller, der auf den Stapel verschoben wird. Es kann keine Instanz von Tab Bar Controller sein.
Ich möchte private APIs und ähnliches vermeiden, bin mir aber nicht sicher, warum diese Verwendung ausdrücklich verboten ist, auch wenn sie anscheinend gut funktioniert. Kennt jemand den Grund?
Ich habe darüber nachgedacht, den Tab-Bar-Controller als Haupt-Controller zu verwenden, wobei jeder der Tabs separate Navigations-Controller enthält. Das Problem dabei ist, dass jeder Navigationscontroller einen einzelnen Root-Ansichtscontroller gemeinsam nutzen muss (nämlich die Tabelle "Accounts" in Tweetie ) - dies scheint nicht zu funktionieren: Wenn Sie den Tabellencontroller auf einen zweiten Navigationscontroller verschieben, wird dieser anscheinend entfernt vom ersten. Ganz zu schweigen von der Buchhaltung bei der Auswahl eines anderen Kontos wäre wahrscheinlich ein Schmerz.
Wie soll ich das richtig umsetzen?
[^ 1]: Der Tab-Bar-Controller muss in Unterklassen unterteilt werden, damit das Navigationselement des Tab-Bar-Controllers auf dieser Ebene mit dem Navigationselement des ausgewählten Tabs synchron bleibt und der Tabellen-Controller des einzelnen Tabs seine jeweiligen Detailansichten self.tabBarController.navigationController
anstelle von verschieben muss self.navigationController
.