2012-04-09 5 views
0

Ich hatte eine tabBarApplication, die ich als Vorlage habe, die eine UINavigation Vorlage auf jeder Registerkarte hat.Einrichten eines UINavigation Controllers auf einem UIViewController als rootView

Ich möchte dieses Beispiel (Art von) verwenden und es in einem einzigen UIViewController in einer anderen Anwendung konvertieren. Ich habe 2 Stück Code vorgestellt, der erste ist mein Template und letzteres ist was ich versuche zu machen. Könnte mir bitte jemand ein paar Tipps oder Hilfe geben, wie geht das richtig? Ich bekomme immer Fehler, aber sie ergeben für mich keinen Sinn, da die tabBarApp es nicht benötigt, dass ein ViewController deklariert wird.

Erste Kodex (Beispiel):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
[self setupFetchedResultsController]; 

if (![[self.fetchedResultsController fetchedObjects] count] > 0) { 
    NSLog(@"!!!!! ~~> There's nothing in the database so defaults will be inserted"); 
    [self importCoreDataDefaultRoles]; 
} 
else { 
    NSLog(@"There's stuff in the database so skipping the import of default data"); 
} 

// The Tab Bar 
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

// The Two Navigation Controllers attached to the Tab Bar (At Tab Bar Indexes 0 and 1) 
UINavigationController *personsTVCnav = [[tabBarController viewControllers] objectAtIndex:0]; 
UINavigationController *rolesTVCnav = [[tabBarController viewControllers] objectAtIndex:1]; 
return YES; 
} 

Second-Code (was ich versuche zu machen):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
[self setupFetchedResultsController]; 

if (![[self.fetchedResultsController fetchedObjects] count] > 0) { 
    NSLog(@"!!!!! ~~> There's nothing in the database so defaults will be inserted"); 
    [self importCoreDataDefaultRoles]; 
} 
else { 

UIViewController *mainViewController = (UIViewController *)self.window.rootViewController; 

UINavigationController *readingsTVCnav = [[mainViewController viewController] objectAtIndex:0]; 

// Override point for customization after application launch. 
return YES; 
} 

Die fetching Teile des Codes zu Core Data verbunden sind, die bereits festgelegt hoch und arbeiten. Der Grund für diese Änderung ist, dass ich einen einfachen Ansicht-Controller als Startbildschirm anstelle der TabBarConfiguration eingerichtet haben möchte.

Prost Jeff

EDIT: Ich habe ein Bild für Klarheit

enter image description here

+0

Ich bin nicht klar, wie Ihre neue Navigation funktioniert. Ist Ihr anfänglicher View-Controller ein Navigationscontroller? – jonkroll

+0

Ja, ich verwende Storyboard und habe einen ViewController in einen UINavigation Controller eingebettet. –

+0

Was ist in Ihrem eingebetteten ViewController? Wie navigieren Sie zu den anderen Teilen Ihrer App? – jonkroll

Antwort

1

Von hinzugefügt, was Sie beschreiben, und in Ihrem Bild zeigen, haben Sie die Navigationssteuerung als App Stammansicht einrichten Regler. So Sie darauf zugreifen können (wenn Sie müssen) didFinishLaunchingWithOptions: Methode ist in AppDelegate wie folgt:

UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 

für Ihre App Obwohl ich nicht glaube, es gibt keinen Grund Sie die nav-Controller von AppDelegate verweisen müssen . Alle Einstellungen, die Sie benötigen (mit Ausnahme Ihres Code-Codes, von dem Sie sagen, dass er bereits funktioniert), können über das Storyboard abgewickelt werden.

In Ihrem nagivationController root viewController (der mit all den Tasten) sollten Sie einen Übergang von jeder Schaltfläche zum entsprechenden viewController in Ihrem Storyboard einrichten. Stellen Sie sicher, dass Sie sie dann als "Push" -Segmente einrichten, so dass sie den View-Controller auf den Navigations-Stack Ihres NavigationControllers schieben. Wenn es irgendeine besondere Einrichtung ist, müssen Sie für das Kind-View-Controller tun, wenn der Übergang geschieht, können Sie die prepareForSegue: Methode wie folgt implementieren:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"ShowMyViewController"]) { 

     MyViewController *vc = (MyViewController*)segue.destinationViewController;  
     vc.title = @"My Title"; 
     vc.someProperty = @"Some Value"; 
    } 
} 

können Sie (und sollte) identifizieren jedes Ihrer segues im Storyboard mit einer eindeutigen Kennung, damit Sie sie beim Aufruf dieser Methode identifizieren können.

+0

Hallo Jonkroll, Danke für diese Antwort - wenn ich nach Hause komme, werde ich noch einmal daran gehen und meine Ergebnisse veröffentlichen :-) Prost –

Verwandte Themen