Программно изменить rootViewController для storyBoard
Я создал свой проект, используя Storyboards
. Корень ViewController
лежит внутри a Storyboard
, я не записал ни одного кода в appDelegate
.
Теперь я хочу показать экскурсию по моему приложению, поэтому я хочу изменить корень ViewController
от Tab Bar
на мой TourVC, и когда гастроли приложения закончены, я хочу снова отключить мой корень ViewController
до Tab 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;
Но мое приложение выходит из строя с этим журналом ошибок,
[ProductTourViewController selectedViewController]: unrecognized selector sent to instance 0x1766a9e0
А также я получаю предупреждение,
Unsupported Configuration: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.
Ответы
Ответ 1
Objective-C:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UITabBarController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"tabBarcontroller"];
[[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];
Swift:
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = mainStoryboard.instantiateViewControllerWithIdentifier("tabBarcontroller") as UITabBarController
UIApplication.sharedApplication().keyWindow?.rootViewController = viewController;
Swift 3:
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = mainStoryboard.instantiateViewController(withIdentifier: "tabBarcontroller") as! UITabBarController
UIApplication.shared.keyWindow?.rootViewController = viewController
Ответ 2
Задайте идентификатор раскадровки для своего класса в главной раскадровке.
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;
Ответ 3
В swift мы можем реализовать это как следующее
let storyboard = UIStoryboard(name: "StartingPage", bundle: NSBundle.mainBundle())
let loginView: SignInVC = storyboard.instantiateViewControllerWithIdentifier("SignInVC") as! SignInVC
UIApplication.sharedApplication().keyWindow?.rootViewController = loginView
Ответ 4
Я использую простое это:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"NameOfStoryBoard" bundle:nil];
UITabBarController *rootViewController = [sb instantiateViewControllerWithIdentifier:@"NameOfTabBarController"];
[[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];
Ответ 5
Просто чтобы добавить к Sunny Shah ответ, это версия Swift 3:
let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController: UIViewController = mainStoryBoard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController
UIApplication.shared.keyWindow?.rootViewController = viewController
Ответ 6
Код Swift 3:
Используйте ниже в функции didFinishLaunchingWithOptions Appdelegate.
Замените "HomeViewController" на ViewController, который вы хотите установить как Root ViewController при запуске приложения.
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewController(withIdentifier: "HomeViewController")
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
return true