9

У меня есть значение в NSUserdefaults. Я использую storyboard, он встроен в UINavigationController.Программно заданный rootViewcontroller для UINavigationcontroller в Storyboard в Appdelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if([[NSUserDefaults standardUserDefaults]objectForKey:@"isLoggedIn"]){ 
     //show home page here 
     }else{ 
      // show login view 
     } 
} 

Я могу открыть приложение с помощью URL также

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
     NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

     if(text.length > 0){ 
      // show home page 

     }else { 
      // show settings page 
     } 

     return YES; 
} 

Как я могу установить rootViewController для UINavigationController на основе значения, которое извлекается .Can кто-то пожалуйста, помогите мне?

ответ

28

Вы можете создать объект UINavigationController с ViewController согласно если/другое и установите навигационный контроллер в качестве свойства rootViewController окна в AppDelegate следующим образом:

LoginViewController *loginController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"loginController"]; //or the homeController 
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:loginController]; 
self.window.rootViewController = navController; 
+1

не забывайте, call '[self.window makeKeyAndVisible];' – schmidt9

+0

@ schmidt9 'makeKeyAndVisible' не требуется, если у вас не много окон и изменение порядка отображения. – execv

2

Это то, что я использовал в своем коде

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    // Get user preference 
NSString * wxyz=[defaults stringForKey:@"wxyz"]; 
    //Get value at wxyz field 

if ([self isInValidwxyz:wxyz]) { 
    //check if wxyz is invalid 
    //If wxyz is invalid, write custom code 
} 
else{ 
    //if valid, 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryBoardiPhone" bundle:nil]; 
     self.window.rootViewController = [storyboard instantiateInitialViewController]; 
    } 
    else{ 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryBoardiPad" bundle:nil]; 
     self.window.rootViewController = [storyboard instantiateInitialViewController];; 
    } 
    [self.window makeKeyAndVisible]; 
} 

, а затем пройти через этот link для реализации с навигационным контроллером

Смежные вопросы