Wie man UITabBarController Last view-Controller träge?
Ich habe einen UITabBarController erstellt programaticaly, verwaltet, 4 Unterklassen von UIViewController. So etwas wie:
//Create Controller 1
self.terminal = [[[TerminalController alloc] initWithNibName:@"TerminalView" bundle:nil] autorelease];
UINavigationController* navTerminal = [[[UINavigationController alloc] initWithRootViewController:terminal] autorelease];
navTerminal.title = __(@"Terminal");
navTerminal.navigationBar.barStyle = UIBarStyleBlackOpaque;
navTerminal.tabBarItem.image = [UIImage imageNamed:@"tab_terminal.png"];
//Create Controller 2
self.history = [[[HistoryController alloc] initWithNibName:@"HistoryView" bundle:nil] autorelease];
UINavigationController* navHistory = [[[UINavigationController alloc] initWithRootViewController:history] autorelease];
navHistory.title = __(@"History");
navHistory.navigationBar.barStyle = UIBarStyleBlackOpaque;
navHistory.tabBarItem.image = [UIImage imageNamed:@"tab_history.png"];
//Create Controller 3
self.settings = [[[SettingsController alloc] initWithNibName:@"SettingsView" bundle:nil] autorelease];
UINavigationController* navSettings = [[[UINavigationController alloc] initWithRootViewController:settings] autorelease];
navSettings.title = __(@"Settings");
navSettings.navigationBar.barStyle = UIBarStyleBlackOpaque;
navSettings.tabBarItem.image = [UIImage imageNamed:@"tab_settings.png"];
//Create Controller 4
HelpController* help = [[[HelpController alloc] initWithNibName:@"HelpView" bundle:nil] autorelease];
UINavigationController* navHelp = [[[UINavigationController alloc] initWithRootViewController:help] autorelease];
navHelp.title = __(@"Help");
navHelp.navigationBar.barStyle = UIBarStyleBlackOpaque;
navHelp.tabBarItem.image = [UIImage imageNamed:@"tab_help.png"];
//Create Tab Bar an add it's view to window.
self.tabBar = [[[UITabBarController alloc] initWithNibName:nil bundle:nil] autorelease];
tabBar.viewControllers = [[[NSArray alloc] initWithObjects:navTerminal, navHistory, navSettings, navHelp, nil] autorelease];
tabBar.delegate = self;
[window addSubview:tabBar.view];
Gibt es eine Möglichkeit zu sagen, die UITabBarController zum laden der view-Controller träge? ej, wenn der Benutzer klickt auf einen der tab-bar-Elemente oder, wenn tabBarController setSelectedIndex genannt wird?
InformationsquelleAutor Rafael Vega | 2009-07-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mache ich diese Sache sehr in einer meiner apps. Der trick ist, um Ihre view-controller NICHT eine Unterklasse von UITabBarController, sondern UIViewController, und implementieren UITabBarDelegate. Ich habe die Ansicht für diese in IB, über der tab-Leiste (mit der richtigen Anzahl der Schaltflächen, Bilder, tags, etc.) und ein Platzhalter UIView, die verwendet wird, richtig platzieren Sie die Untersichten sind vertauscht. Ansicht die Umschaltung geschieht auf der tabBar:didSelectItem: Es sieht ungefähr so aus:
Der code könnte sicherlich mehr TROCKEN, aber Sie bekommen die Idee.
Tatsächlich, ich mache einige Arbeit und Tests mit diesem und lief in ein problem. Wenn ich ein Modal-View-Controller und dann entlassen, modal, wenn ich wieder in der Registerkarte Steuerung das interface ist alles vermasselt. Meine UITabBar hat sich verschoben, die UIView, die die Untersicht des custom tab bar controller hat gedehnt zu füllen mehr Platz auf dem Bildschirm. Haben Sie Probleme wie diese, und wenn ja, hast du eine Lösung gefunden?
Wyland, ich habe keine Probleme wie diese, aber ich glaube nicht, dass ich jemals versucht haben, die Anzeige eines modalen Blick über es. Ich kann nicht aus irgendeinem Grund denken, aus der Spitze von meinem Kopf, es würde sich schlecht benehmen wie die, aber.
+1 muss ich roll meine eigene UITabbarController-wie root-controller für ein Projekt und ich war nicht sicher darüber, wie die Verwaltung der sub-viewcontrollers, das gibt mir genug bekommen werde, vielen Dank!
InformationsquelleAutor zpasternack
Was sind Sie versuchen zu laden, faul?
Dies ist ein ziemlich standard-UITabBarController Umsetzung. Ich habe eine sehr ähnliche, um es in einer Anwendung, die ich Schreibe. In meinem code die Kommentarzeichen vor der viewDidLoad (die Methode wird aufgerufen, nachdem ein controller geladen hat, seine damit verbundenen Blick in den Speicher) wird nicht aufgerufen, bis die Lasche berührt wird.
Ich glaube, dass die Art und Weise, die Sie programmiert haben (abgesehen von der autoreleased-Objekte) ist die bevorzugte Methode zum erstellen dieser Art von UI.
Freigabe eines Objekts gibt den Speicher sofort, in der Erwägung, dass eine autoreleased-Objekt hat zu warten für den pool zu entleeren. Auf einem desktop-computer könnte dies nicht ein Problem, aber in der Welt der iPhone-Speicher ist eine begrenzte Ware. Eine der WWDC '09 video auf memory managment speziell empfiehlt gegen die Verwendung von autorelease in Situationen wie dieser, wo es keinen anderen Grund, als dem code-Kürzel.
ich bin neu in der iOS-Entwicklung...kannst du bitte erklären Sie mir, wie diese Registerkarte controller tatsächlich funktioniert? wie und Wann er laden seine Ansichten zu Speicher und wie lange bleibt es in Erinnerung
InformationsquelleAutor Lounges
Einen UITabBarController erfordert, dass die eigentlichen view-Controller gesetzt werden für seine
viewControllers
Eigenschaft - es gibt keine lazy loading in den Apple-frameworks. Die tab-bar-controller stützt sich auf bestimmte Aspekte der Controller lädt er für seine Eigenschaften. Es wird jedoch nicht nennenviewDidLoad
bis zum drücken der tab-Taste zum ersten mal.Was Sie tun können, stattdessen wird erstellen Sie Ihre eigenen "Platzhalter" - view-controller, der in seiner
viewDidLoad
oderviewWillAppear
Methoden, ersetzt sich in die tab bar controller mit seinen eigentlichen view-controller. So minimieren Sie den Arbeitsspeicher, der von der view-Controller gehalten, indem Sie die tab-bar-controller, bis Sie laden eine bestimmte Registerkarte view-controller und ersetzen Sie es mit Ihrem mehr Arbeitsspeicher - und Prozessor-intensive controller.Seite Hinweis: beachten Sie, dass Sie wollen, ändern Sie die tab-bar-controller
viewControllers
Eigenschaft direkt, anstatt diesetViewControllers:animated:
- Methode, so dass Ihre Benutzer nicht sehen, eine animation, die jedes mal, wenn Sie laden einen neuen controller.InformationsquelleAutor Tim
Können Sie nicht immer verwenden Sie ein UITabBarController und verwalten der tabbar urself, wenn jemand wählt eine Registerkarte, u drücken Sie die viewcontrollers anzeigen in der didSelectIndex Methode
InformationsquelleAutor Daniel
Innerhalb der benutzerdefinierten UITabBarController ist didSelectItem Methode, Sie sollte einfach nur diesen Aufruf:
InformationsquelleAutor PostCodeism