Подтвердить что ты не робот

Программно изменить 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:.
4b9b3361

Ответ 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

enter image description here Задайте идентификатор раскадровки для своего класса в главной раскадровке.

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