Estoy creando una aplicación que usa el SDK de Facebook para autenticar a los usuarios. Estoy tratando de consolidar la lógica de Facebook en una clase separada. Aquí está el código (despojado por simplicidad):
import Foundation
class FBManager {
class func fbSessionStateChane(fbSession:FBSession!, fbSessionState:FBSessionState, error:NSError?){
//... handling all session states
FBRequestConnection.startForMeWithCompletionHandler { (conn: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
println("Logged in user: \n\(result)");
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let loggedInView: UserViewController = storyboard.instantiateViewControllerWithIdentifier("loggedInView") as UserViewController
loggedInView.result = result;
//todo: segue to the next view???
}
}
}
Estoy usando el método de clase anterior para verificar los cambios de estado de la sesión, y funciona bien.
P: Una vez que tengo los datos del usuario, ¿cómo puedo pasar a la siguiente vista desde esta clase personalizada?
EDITAR: para ser claros, tengo un segue con identificador en el guión gráfico, y estoy tratando de encontrar una manera de realizar un segue de una clase que no sea el controlador de vista
performSegue:
?Respuestas:
Si su segue existe en el guión gráfico con un identificador de segue entre sus dos vistas, puede llamarlo mediante programación usando:
Para versiones anteriores:
También puedes hacer:
O si estás en un controlador de navegación:
fuente
Puedes usar NSNotification
Agregue un método de publicación en su clase personalizada:
Agregue un observador en su ViewController:
Añadir función en su ViewController:
fuente
Si su segue existe en el guión gráfico con un identificador de segue entre sus dos vistas, puede llamarlo mediante programación usando
Si estás en el controlador de navegación
Te recomendaré para un segundo enfoque usando el controlador de navegación.
fuente
Puedes usar segue así:
fuente
Swift 3 : también funciona con SpriteKit
Puede usar NSNotification .
Ejemplo:
1.) Cree una secuencia en el guión gráfico y nombre el identificador "segue"
2.) Cree una función en el ViewController del que está segue.
3.) En el ViewDidLoad () de su ViewController está segue de crear el observador.
Actualización : la última vez que usé esto tuve que cambiar la
.addObserver
llamada al siguiente código para silenciar los errores.4.) En el ViewController o Scene al que está siguiendo, agregue el Método de publicación donde desee que se desencadene la segue.
Actualización : la última vez que usé esto tuve que cambiar la
.post
llamada al siguiente código para silenciar los errores.fuente
NotificationCenter.default.addObserver(self, selector: #selector(goToDifferentView), name: NSNotification.Name(rawValue: "segue"), object: nil)
Lo que quiere hacer es realmente importante para las pruebas unitarias. Básicamente, necesita crear una pequeña función local en el controlador de vista. Asigne un nombre a la función, solo incluya el
performSegueWithIndentifier
.A continuación, cambie su clase de utilidad
FBManager
para incluir un inicializador que tome un argumento de una función y una variable para contener la función ViewController que realiza la segue.(El init de conveniencia le permite usar esto en pruebas unitarias sin ejecutar el segue).
Finalmente, donde tienes // todo: pasar a la siguiente vista ???, pon algo en la línea de:
En sus pruebas unitarias, simplemente puede invocarlo como:
donde doThatThing es su fbsessionstatechange y
UtilClass
es FBManager.Para su código real, simplemente pase
localFunc
(sin paréntesis) a la clase FBManager.fuente
Esto funcionó para mí.
En primer lugar, proporcione al controlador de vista en su storyboard una ID de Storyboard dentro del inspector de identidad. Luego use el siguiente código de ejemplo (asegurándose de que la clase, el nombre del guión gráfico y el ID del guión gráfico coincidan con los que está usando):
Para obtener más detalles, consulte http://sketchytech.blogspot.com/2012/11/instantiate-view-controller-using.html mis mejores deseos
fuente
Puedes hacer esto usando la
performSegueWithIdentifier
función.Sintaxis:
Ejemplo:
fuente
Otra opción es usar modal segue
PASO 1: vaya al guión gráfico y dele al controlador de vista una identificación del guión gráfico . Puede encontrar dónde cambiar la ID del guión gráfico en el Inspector de identidad a la derecha. Llamemos al ID del guión gráfico
ModalViewController
PASO 2: Abra el controlador de vista 'remitente' (llamémoslo
ViewController
) y agregue este códigoTenga en cuenta que el controlador de vista que queremos abrir también se llama
ModalViewController
PASO 3: Para cerrar ModalViewController, agréguele esto
fuente
Esto funcionó para mí:
fuente