present open instantiateviewcontrollerwithidentifier change ios uiviewcontroller storyboard

ios - open - Cambia programáticamente a rootViewController de storyBoard



show view controller programmatically swift 4 (8)

Código de Swift 3:

Use a continuación en la función diddefinanceLaunchingWithOptions Appdelegate. Reemplace "HomeViewController" con ViewController que desea establecer como Root ViewController en el inicio de la aplicación.

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

Creé mi proyecto usando Storyboards . La raíz ViewController encuentra dentro de un Storyboard , no he escrito un solo código en la aplicaciónDelegate.

Ahora quiero mostrar un recorrido por mi aplicación, así que quiero cambiar el ViewController de la Tab Bar a mi TourVC y cuando termine de recorrer la aplicación, quiero volver a cambiar mi ViewController raíz a la Tab Bar .

Así que busqué en línea y seguí los siguientes puntos

1) Eliminar Storyboards del archivo app.plist, 2) Desmarcar la opción "isInitialViewController" de Storyboards que está marcada en el caso del controlador de la Tab Bar de Tab Bar porque es una raíz ViewController , 3) Agregar este código en el archivo 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;

Pero mi aplicación se bloquea con este registro de errores

[ProductTourViewController selectedViewController]: unrecognized selector sent to instance 0x1766a9e0

Y también recibo una advertencia,

Unsupported Configuration: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.


C objetivo

paso 1: eliminar la historia principal de info.plist

paso 2: agrega la identificación del guión gráfico a tu controlador de vista en tu constructor de interfaz

paso 3: agregue el siguiente código a la aplicación finalizó el método en el delegado de la aplicación

self.window = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen].bounds]; //set main story board if( condition){ UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"StoryboardName1" bundle:nil]; UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController1"]; [[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController]; [self window].rootViewController = rootViewController; [self.window makeKeyAndVisible]; }else{ UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"StoryboardName2" bundle:nil]; UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController2"]; [[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController]; [self window].rootViewController = rootViewController; [self.window makeKeyAndVisible]; }


C objetivo:

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


Establezca ID de guión gráfico para su clase en su guión gráfico principal.

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;


Este es un artículo antiguo, pero responderé. No recomiendo el siguiente código.

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

Porque estás creando dos instancias. Recomiendo escribir el siguiente código en el ViewController apropiado.

let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.window?.rootViewController = self


Solo para agregar a la respuesta de Sunny Shah, esta es la versión de Swift 3:

let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let viewController: UIViewController = mainStoryBoard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController UIApplication.shared.keyWindow?.rootViewController = viewController


Yo uso simple esto:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"NameOfStoryBoard" bundle:nil]; UITabBarController *rootViewController = [sb instantiateViewControllerWithIdentifier:@"NameOfTabBarController"]; [[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];


Rápidamente podemos implementarlo de la siguiente manera

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