web-dev-qa-db-ja.com

AppdelegateのストーリーボードでUINavigationcontrollerのrootViewcontrollerをプログラムで設定

NSUserdefaultsに値があります。 storyboardを使用していますが、UINavigationControllerに埋め込まれています。

- (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;
}

取得した値に基づいて、rootViewControllerUINavigationControllerを設定するにはどうすればよいですか。だれでも手伝ってもらえますか?

11
Aswathy Bose

次のように、if/else条件に従ってViewControllerでUINavigationControllerのオブジェクトを作成し、ナビゲーションコントローラーをAppDelegateのウィンドウのrootViewControllerプロパティとして設定できます。

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

これは私のコードで使用したものです

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 ナビゲーションコントローラでの実装

2
Prince Agrawal