【问题标题】:Programmatically set rootViewcontroller for UINavigationcontroller in Storyboard in Appdelegate在 Appdelegate 的 Storyboard 中以编程方式为 UINavigationcontroller 设置 rootViewcontroller
【发布时间】:2014-01-13 22:02:02
【问题描述】:

我在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;
}

如何根据检索到的值为UINavigationController 设置rootViewController。有人可以帮我吗?

【问题讨论】:

    标签: objective-c uinavigationcontroller storyboard nsuserdefaults appdelegate


    【解决方案1】:

    您可以使用您的 ViewController 根据 if/else 条件创建 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;
    

    【讨论】:

    • 别忘了致电[self.window makeKeyAndVisible];
    • @schmidt9 makeKeyAndVisible 不应该是必需的,除非您有多个窗口并更改显示顺序。
    【解决方案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 使用导航控制器实现

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      相关资源
      最近更新 更多