Mam program UITabBarController utworzony programowo, który zarządza 4 podklasami UIViewController. Coś jak:Jak sprawić, aby kontrolery UITabBarController ładowały się leniwie?
//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];
Czy istnieje sposób, aby powiedzieć UITabBarController lejce załadować kontrolery widoku? ej, gdy użytkownik kliknie jeden z elementów paska kart lub gdy zostanie wywołany tabBarController setSelectedIndex?
Miałem ten sam problem co OP i ten kod działał idealnie dla mnie. Dzięki!! Udało mi się obniżyć czas uruchamiania aplikacji o 2 pełne sekundy. –
Właściwie robię więcej pracy i testów z tym i wpadłem na problem. Jeśli przedstawię kontroler widoku Modal, a następnie odrzuci ten modal, po powrocie do kontrolera kart jego interfejs zostanie zerwany. Mój UITabBar został przeniesiony, UIView, który jest podzbiorem niestandardowego kontrolera paska kart, został rozciągnięty, aby wypełnić więcej ekranu. Czy napotkasz na takie problemy, a jeśli tak, czy znalazłeś jakieś rozwiązanie? –
@Kenny Wyland, Nie miałem żadnych takich problemów, ale nie sądzę, żebym kiedykolwiek próbował pokazać na nim modalny widok. Nie mogę sobie wyobrazić żadnego powodu z głowy, że źle by się tak zachował. – zpasternack