ios - tareas - quitar iconos anclados windows 10
Swift: cómo mostrar un controlador de la barra de pestañas después de una vista de inicio de sesión (4)
Dale a tu controlador de la barra de pestañas un StoryboardID (di "tabbar") y presiónalo como un UIViewController normal:
let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as! UIViewController
self.navigationController?.pushViewController(nextViewController, animated: true)
He visto muchas publicaciones similares a esta aquí, pero todas son sobre Objective-C mientras estoy desarrollando mi aplicación en Swift. Como puede ver en la imagen, tengo una vista de pantalla de inicio de sesión y he implementado correctamente el mecanismo de inicio de sesión.
Ahora me gustaría que cuando el inicio de sesión haya tenido éxito, se muestre el controlador de la barra de pestañas. En mi controlador de vista de inicio de sesión tengo esta función para iniciar sesión:
var finalURL:NSString = "/(Settings.webServerLoginURL)?username=/(username)&password=/(password)"
LoginService.requestLoginWithURL(NSURL(string: finalURL as String)!, completionHandler: { (success) -> Void in
if (success) {
NSLog("Login OK")
/* Scarica dal database i tasks di LoggedUser.id */
/* Redirect al tab HOME dell''applicazione dove si mostrano il numero di task
di quell''utente ed in cima "BENVENUTO: name surname" */
}
else {
self.alertView.title = "Autenticazione fallita!"
self.alertView.message = "Username o passowrd."
self.alertView.delegate = self
self.alertView.addButtonWithTitle("OK")
self.alertView.show()
}
Así que creo que debería mostrar el controlador de la barra de pestañas después de
NSLog("Login OK")
pero no se como Soy un principiante de Swift / XCode ... si me puedes explicar. Gracias a todos los que han leído.
Me encontré con este mismo problema al intentar pasar de un controlador que usé para touchID a un TabBarController. Al hacer el segue en un bloque asíncrono resolví el problema.
dispatch_async(dispatch_get_main_queue(), {
self.dismissViewControllerAnimated(false, completion: {})
self.performSegueWithIdentifier("authnToAppSegue", sender: nil)
})
Para mostrar el controlador de la barra de pestañas desde la página de inicio de sesión, conecte la página de inicio de sesión y TabbarController con un segmento Mostrar y asigne un identificador en el inspector de atributos (Diga "mySegueIdentifier").
Para agregar segue, simplemente haga clic con el botón derecho y arrastre desde el controlador de vista de inicio de sesión a TabbarController.
En el inicio de sesión exitoso, simplemente puede llamar al método "performSegueWithIdentifier" de la siguiente manera
self.performSegueWithIdentifier("mySegueIdentifier", sender: nil)
En tu caso lo llamas después de esta línea.
NSLog("Login OK")
Si no desea navegar desde la página de inicio de sesión a TabbarController, también puede configurarlo como rootViewController después de un inicio de sesión exitoso. Para hacer esto, configure un identificador a TabbarController (Diga "myTabbarController")
let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate
var initialViewController = self.storyboard!.instantiateViewControllerWithIdentifier("myTabbarControllerID") as! UIViewController
appDelegate.window?.rootViewController = initialViewController
appDelegate.window?.makeKeyAndVisible()
Editar:
Swift 3
let appDelegate = UIApplication.shared.delegate! as! AppDelegate
let initialViewController = self.storyboard!.instantiateViewController(withIdentifier: "myTabbarControllerID")
appDelegate.window?.rootViewController = initialViewController
appDelegate.window?.makeKeyAndVisible()
Codificación feliz .. :)
func setTabBarVisible(visible:Bool, animated:Bool) {
//* This cannot be called before viewDidLayoutSubviews(), because the frame is not set before this time
// bail if the current state matches the desired state
if (tabBarIsVisible() == visible) { return }
// get a frame calculation ready
let frame = self.tabBarController?.tabBar.frame
let height = frame?.size.height
let offsetY = (visible ? -height! : height)
// zero duration means no animation
let duration:NSTimeInterval = (animated ? 0.3 : 0.0)
// animate the tabBar
if frame != nil {
UIView.animateWithDuration(duration) {
self.tabBarController?.tabBar.frame = CGRectOffset(frame!, 0, offsetY!)
return
}
}
}
func tabBarIsVisible() ->Bool {
return self.tabBarController?.tabBar.frame.origin.y < CGRectGetMaxY(self.view.frame)
}
// Call the function from tap gesture recognizer added to your view (or button)
@IBAction func tapped(sender: AnyObject) {
setTabBarVisible(!tabBarIsVisible(), animated: true)
}