color ios

ios - color - establecer viewcontroller inicial en appdelegate-swift



navigationitem title color (11)

Me gustaría configurar el viewcontroller inicial del appdelegate. Encontré una muy buena respuesta, sin embargo está en Objective C y estoy teniendo problemas para lograr lo mismo rápidamente.

Establecer programáticamente el controlador de vista inicial utilizando Storyboards

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>]; self.window.rootViewController = viewController; [self.window makeKeyAndVisible]; return YES; }

¿Alguien capaz de ayudar?

Quiero que Viewcontroller inicial dependa de que se cumplan ciertas condiciones utilizando una sentencia condicional.


Aquí hay una buena manera de abordarlo. Este ejemplo coloca un controlador de navegación como el controlador de vista raíz, y pone el controlador de vista de su elección dentro de él en la parte inferior de la pila de navegación, listo para que pueda extraer lo que necesite de él.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // mainStoryboard let mainStoryboard = UIStoryboard(name: "MainStoryboard", bundle: nil) // rootViewController let rootViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainViewController") as? UIViewController // navigationController let navigationController = UINavigationController(rootViewController: rootViewController!) navigationController.navigationBarHidden = true // or not, your choice. // self.window self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.rootViewController = navigationController self.window!.makeKeyAndVisible() }

Para hacer que este ejemplo funcione, configuraría "MainViewController" como ID del guión gráfico en su controlador de vista principal, y el nombre del guión gráfico en este caso sería "MainStoryboard.storyboard". Renovo mi guión gráfico de esta manera porque Main.storyboard para mí no es un nombre propio, especialmente si alguna vez vas a la subclase.


Bueno, todas las respuestas arriba / abajo están produciendo una advertencia acerca de que no hay un punto de entrada en el guión gráfico.

Si desea tener 2 (o más) controladores de vista de entrada que dependen de alguna condición (por ejemplo, condiciónVariable ), entonces lo que debe hacer es:

  • En su Main.storyboard cree UINavigationController sin rootViewController, configúrelo como punto de entrada
  • Cree 2 (o más) segmentos "Mostrar" en controladores de vista, asígneles una identificación, digamos id1 e id2
  • Use el siguiente código:

    class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let navigationController = window!.rootViewController! as! UINavigationController navigationController.performSegueWithIdentifier(conditionVariable ? "id1" : "id2") return true }

Espero que esto ayude.


Lo había hecho en Xcode 8 y swift 3.0 espero que sea útil para usted y funcione perfectamente. Use el siguiente código:

var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { self.window = UIWindow(frame: UIScreen.main.bounds) let storyboard = UIStoryboard(name: "Main", bundle: nil) let initialViewController = storyboard.instantiateViewController(withIdentifier: "ViewController") self.window?.rootViewController = initialViewController self.window?.makeKeyAndVisible() return true }

Y si está usando el controlador de navegación, entonces use el siguiente código para eso:

var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { self.window = UIWindow(frame: UIScreen.main.bounds) let storyboard = UIStoryboard(name: "Main", bundle: nil) let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as! UINavigationController let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") navigationController.viewControllers = [initialViewController] self.window?.rootViewController = navigationController self.window?.makeKeyAndVisible() return true }


Prueba esto. Por ejemplo: debe usar UINavigationController como controlador de vista inicial. Luego, puede configurar cualquier controlador de vista como raíz del guión gráfico.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as UINavigationController let rootViewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("VC") as UIViewController navigationController.viewControllers = [rootViewController] self.window?.rootViewController = navigationController return true }

Ver la pantalla de mi storyboard.


Utilicé este hilo para ayudarme a convertir el objetivo C en rápido y funciona perfectamente.

Crear una instancia y presentar una vistaController en Swift

Código de Swift 2 :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { self.window = UIWindow(frame: UIScreen.mainScreen().bounds) let storyboard = UIStoryboard(name: "Main", bundle: nil) let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginSignupVC") self.window?.rootViewController = initialViewController self.window?.makeKeyAndVisible() return true }

Código de Swift 3 :

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { self.window = UIWindow(frame: UIScreen.main.bounds) let storyboard = UIStoryboard(name: "Main", bundle: nil) let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginSignupVC") self.window?.rootViewController = initialViewController self.window?.makeKeyAndVisible() return true }


lo había hecho en Objective-c espero que sea útil para ti

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *viewController; NSUserDefaults *loginUserDefaults = [NSUserDefaults standardUserDefaults]; NSString *check=[loginUserDefaults objectForKey:@"Checklog"]; if ([check isEqualToString:@"login"]) { viewController = [storyboard instantiateViewControllerWithIdentifier:@"SWRevealViewController"]; } else { viewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; } self.window.rootViewController = viewController; [self.window makeKeyAndVisible];


si no está usando el guión gráfico, puede intentar esto

var window: UIWindow? var initialViewController :UIViewController? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { initialViewController = MainViewController(nibName:"MainViewController",bundle:nil) let frame = UIScreen.mainScreen().bounds window = UIWindow(frame: frame) window!.rootViewController = initialViewController window!.makeKeyAndVisible() return true }


En caso de que desee hacerlo en el controlador de visualización y no en el delegado de la aplicación: Simplemente busque la referencia a AppDelegate en su controlador de vista y restablezca su objeto de ventana con el controlador de vista correcto, ya que es rootviewController.

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.window = UIWindow(frame: UIScreen.mainScreen().bounds) let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let yourVC = mainStoryboard.instantiateViewControllerWithIdentifier("YOUR_VC_IDENTIFIER") as! YourViewController appDelegate.window?.rootViewController = yourVC appDelegate.window?.makeKeyAndVisible()


Para Xcode 8, Swift 3:

Crear una instancia del controlador de vista raíz desde el guión gráfico:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // this line is important self.window = UIWindow(frame: UIScreen.main.bounds) // In project directory storyboard looks like Main.storyboard, // you should use only part before ".storyboard" as it''s name, // so in this example name is "Main". let storyboard = UIStoryboard.init(name: "Main", bundle: nil) // controller identifier sets up in storyboard utilities // panel (on the right), it called Storyboard ID let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController self.window?.rootViewController = viewController self.window?.makeKeyAndVisible() return true }

Si quieres usar UINavigationController como root:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // this line is important self.window = UIWindow(frame: UIScreen.main.bounds) let storyboard = UIStoryboard.init(name: "Main", bundle: nil) let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController let navigationController = UINavigationController.init(rootViewController: viewController) self.window?.rootViewController = navigationController self.window?.makeKeyAndVisible() return true }

Crea una instancia del controlador de vista raíz desde xib:

Es casi lo mismo, pero en lugar de líneas

let storyboard = UIStoryboard.init(name: "Main", bundle: nil) let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController

tendrás que escribir

let viewController = YourViewController(nibName: "YourViewController", bundle: nil)


Swift 4:

Agregue estas líneas dentro de AppDelegate.swift, dentro de la función didFinishLaunchingWithOptions () ...

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Setting the Appropriate initialViewController // Set the window to the dimensions of the device self.window = UIWindow(frame: UIScreen.main.bounds) // Grab a reference to whichever storyboard you have the ViewController within let storyboard = UIStoryboard(name: "Name of Storyboard", bundle: nil) // Grab a reference to the ViewController you want to show 1st. let initialViewController = storyboard.instantiateViewController(withIdentifier: "Name of ViewController") // Set that ViewController as the rootViewController self.window?.rootViewController = initialViewController // Sets our window up in front self.window?.makeKeyAndVisible() return true }

Ahora, por ejemplo, muchas veces hacemos algo como esto cuando queremos conducir al usuario a una pantalla de inicio de sesión o a una pantalla de configuración inicial o volver a la pantalla principal de la aplicación, etc. Si quieres hacer algo así también , puedes usar este punto como una bifurcación en el camino para eso.

Piénsalo. Puede tener un valor almacenado en NSUserDefaults por ejemplo que contenga un booleano UserLoggedIn y if userLoggedIn == false { use this storyboard & initialViewController... } else { use this storyboard & initialViewController... }


I worked out a solution on Xcode 6.4 in swift. // I saved the credentials on a click event to phone memory @IBAction func gotobidderpage(sender: AnyObject) { if (usernamestring == "bidder" && passwordstring == "day303") { rolltype = "1" NSUserDefaults.standardUserDefaults().setObject(usernamestring, forKey: "username") NSUserDefaults.standardUserDefaults().setObject(passwordstring, forKey: "password") NSUserDefaults.standardUserDefaults().setObject(rolltype, forKey: "roll") self.performSegueWithIdentifier("seguetobidderpage", sender: self) } // Retained saved credentials in app delegate.swift and performed navigation after condition check func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let usernamestring = NSUserDefaults.standardUserDefaults().stringForKey("username") let passwordstring = NSUserDefaults.standardUserDefaults().stringForKey("password") let rolltypestring = NSUserDefaults.standardUserDefaults().stringForKey("roll") if (usernamestring == "bidder" && passwordstring == "day303" && rolltypestring == "1") { // Access the storyboard and fetch an instance of the view controller var storyboard = UIStoryboard(name: "Main", bundle: nil) var viewController: BidderPage = storyboard.instantiateViewControllerWithIdentifier("bidderpageID") as! BidderPage // Then push that view controller onto the navigation stack var rootViewController = self.window!.rootViewController as! UINavigationController rootViewController.pushViewController(viewController, animated: true) } // Override point for customization after application launch. return true } Hope it helps !