以编程方式更改storyBoard的rootViewController

Ran*_*jit 46 storyboard uiviewcontroller ios

我使用了创建我的项目Storyboards.根ViewController在里面Storyboard,我没有写过单个代码appDelegate.

现在,我想告诉我的应用程序的巡演,所以我想根本改变ViewControllerTab Bar我TourVC,当应用程序的游览结束后,我想我的根再次切换回ViewControllerTab Bar.

所以我在网上查询并遵循以下几点

1)Storyboards从app.plist文件中删除,2)取消选中"isInitialViewController"选项Storyboards,在Tab Bar控制器的情况下检查该选项,因为它是根ViewController,3)在appDelegate.m文件中添加此代码.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
ProductTourViewController *PT = [[ProductTourViewController alloc] initWithNibName:@"ProductTourViewController" bundle:nil];
self.window.rootViewController = PT;
[self.window makeKeyAndVisible];
return YES;
Run Code Online (Sandbox Code Playgroud)

但我的应用程序崩溃与此错误日志,

[ProductTourViewController selectedViewController]: unrecognized selector sent to instance 0x1766a9e0
Run Code Online (Sandbox Code Playgroud)

我也收到警告,

Unsupported Configuration: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.
Run Code Online (Sandbox Code Playgroud)

Sun*_*hah 141

Objective-C的:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UITabBarController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"tabBarcontroller"];
[[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];
Run Code Online (Sandbox Code Playgroud)

斯威夫特:

 let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
 let viewController = mainStoryboard.instantiateViewControllerWithIdentifier("tabBarcontroller") as UITabBarController  
   UIApplication.sharedApplication().keyWindow?.rootViewController = viewController;
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = mainStoryboard.instantiateViewController(withIdentifier: "tabBarcontroller") as! UITabBarController
UIApplication.shared.keyWindow?.rootViewController = viewController
Run Code Online (Sandbox Code Playgroud)

  • 只是想注意,在`didFinishLaunchingWithOptions`应用程序还没有设置keyWindow时,所以你应该在这种情况下使用`self.window.rootViewController = ...` (3认同)

May*_*ain 11

在此输入图像描述 在主故事板中为您的班级设置故事板ID.

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

UINavigationController *controller = (UINavigationController*)[MainStoryboard
                                                                           instantiateViewControllerWithIdentifier: @"RootNavigationController"];


LoginViewController *login=[MainStoryboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
            [controller setViewControllers:[NSArray arrayWithObject:login] animated:YES];
self.window.rootViewController=controller;
Run Code Online (Sandbox Code Playgroud)


Nis*_*ada 7

在swift中我们可以实现如下

let storyboard = UIStoryboard(name: "StartingPage", bundle: NSBundle.mainBundle())      
let loginView: SignInVC = storyboard.instantiateViewControllerWithIdentifier("SignInVC") as! SignInVC
UIApplication.sharedApplication().keyWindow?.rootViewController = loginView
Run Code Online (Sandbox Code Playgroud)


MUH*_*SIM 5

我用这个简单:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"NameOfStoryBoard" bundle:nil];
UITabBarController *rootViewController = [sb instantiateViewControllerWithIdentifier:@"NameOfTabBarController"];
[[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];
Run Code Online (Sandbox Code Playgroud)

  • 这段代码片段与接受的答案有何不同? (10认同)