2016-09-03 6 views
0

In AppDelegate möchte ich einen TabBarController als rootViewController setzen.Wie setze ich einen tabBarController als rootViewController

Ich habe versucht:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

Ich habe auch versucht:

UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
self.window.rootViewController = tabBarController; 

aber es sagt:

konnte nicht die Standard-View-Controller für UIMainStoryboardFile 'Main' instanziiert - vielleicht ist der angegebene Einstiegspunkt nicht gesetzt?

Mein vollständiger Code in AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

    // Movies 
    MediaListViewController *moviesVC = (MediaListViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MediaList"]; 
    moviesVC.title = @"Movies"; 
    moviesVC.tabBarItem.image = [[UIImage imageNamed:@"superman"] imageWithRenderingMode:(UIImageRenderingModeAlwaysTemplate)]; 
    UINavigationController *moviesNC = [[UINavigationController alloc] initWithRootViewController:moviesVC]; 
    moviesNC.navigationBar.barTintColor = [[UIColor blackColor]colorWithAlphaComponent:0.5]; 
    moviesNC.navigationBar.tintColor = [UIColor yellowColor]; 
    moviesNC.navigationBar.barStyle = UIBarStyleBlack; 

    //DVDs 
    MediaListViewController *dvdsVC = (MediaListViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MediaList"]; 
    dvdsVC.title = @"DVDs"; 
    dvdsVC.tabBarItem.image = [[UIImage imageNamed:@"hulk"] imageWithRenderingMode:(UIImageRenderingModeAlwaysTemplate)]; 
    UINavigationController *dvdsNC = [[UINavigationController alloc] initWithRootViewController:dvdsVC]; 
    dvdsNC.navigationBar.barTintColor = [[UIColor blackColor]colorWithAlphaComponent:0.5]; 
    dvdsNC.navigationBar.tintColor = [UIColor yellowColor]; 
    dvdsNC.navigationBar.barStyle = UIBarStyleBlack; 

    tabBarController.viewControllers = @[moviesNC, dvdsNC]; 
    tabBarController.tabBar.barTintColor = [[UIColor blackColor]colorWithAlphaComponent:0.5]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 
+0

was ist bei deinem zweiten Versuch passiert? UITabBarController * tabBarController = [[UITabBarController alloc] init]; –

+0

Hallo @AnilVarghese, Es sagt auch dasselbe wie die erste. – Khuong

+1

In Ihrem main.storyboard, haben Sie den ersten Controller (möglicherweise Tabbar-Controller) als 'initialViewController' gesetzt –

Antwort

1

Es gibt einen Schlüssel in der info.plist, die die Hauptstoryboard-Datei, die in Ihrer Anwendung verwendet werden muß, angibt.

info.plist

Also, wenn Ihre Anwendung geladen wird, iOS Kontrollen für diesen Schlüssel und versuchen, das Storyboard mit Namen zu initialisieren, die auf den Wert dieses Schlüssels ist passend. Zur Initialisierung eines Storyboards sollte ein Einstiegspunkt (Initial View Controller) eingestellt werden. Obwohl Sie den Tab-Controller über Code festlegen, versucht das iOS-System, das Storyboard zu initialisieren und diese Nachricht zu senden.

So zum Fixieren der Ausgabe gibt es zwei Möglichkeiten:

  1. nur einen ersten Überblick: Controller in Ihrer Storyboard-Datei festgelegt (A Dummy Einstiegspunkt), in AppDelegate Sie können es außer Kraft setzen (ich empfehle diesen Ansatz)
  2. UIMainStoryboardFile aka Main storyboard file base name Schlüssel von (Dieser Ansatz ist einfach und funktioniert, aber Sie können Ihr Storyboard nie initialisieren, wenn Sie einen Einstiegspunkt festlegen. Also wenn Sie diese Option wählen, können Sie nie verwenden Storyboard für Ihr Design, Sie sind beschränkt auf Ihre Benutzeroberfläche entweder mit Xib oder über Code)
Verwandte Themen