Je crée une application qui utilise le SDK Facebook pour authentifier les utilisateurs. J'essaie de consolider la logique de Facebook dans une classe distincte. Voici le code (dépouillé pour plus de simplicité):
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???
}
}
}
J'utilise la méthode de classe ci-dessus pour vérifier les changements d'état de session, et cela fonctionne bien.
Q: Une fois que j'ai les données de l'utilisateur, comment puis-je passer à la vue suivante à partir de cette classe personnalisée?
EDIT: juste pour être clair, j'ai une séquence avec un identifiant sur le storyboard, et j'essaie de trouver un moyen d'effectuer une séquence à partir d'une classe qui n'est pas le contrôleur de vue
performSegue:
?Réponses:
Si votre segue existe dans le storyboard avec un identifiant de segue entre vos deux vues, vous pouvez simplement l'appeler par programme en utilisant:
Pour les anciennes versions:
Vous pouvez également faire:
Ou si vous êtes dans un contrôleur de navigation:
la source
Vous pouvez utiliser NSNotification
Ajoutez une méthode de publication dans votre classe personnalisée:
Ajoutez un observateur dans votre ViewController:
Ajoutez une fonction dans votre ViewController:
la source
Si votre segue existe dans le storyboard avec un identifiant de segue entre vos deux vues, vous pouvez simplement l'appeler par programme en utilisant
Si vous êtes dans le contrôleur de navigation
Je vous recommanderai pour la deuxième approche en utilisant le contrôleur de navigation.
la source
Vous pouvez utiliser segue comme ceci:
la source
Swift 3 - Fonctionne également avec SpriteKit
Vous pouvez utiliser NSNotification .
Exemple:
1.) Créez une suite dans le storyboard et nommez l'identifiant "segue"
2.) Créez une fonction dans le ViewController à partir duquel vous effectuez la transition.
3.) Dans le ViewDidLoad () de votre ViewController à partir duquel vous faites la transition, créez l'observateur.
Mise à jour - La dernière fois que j'ai utilisé cela, j'ai dû changer l'
.addObserver
appel au code suivant pour faire taire les erreurs.4.) Dans le ViewController ou la scène vers laquelle vous effectuez la transition, ajoutez la méthode de publication à l'endroit où vous souhaitez que la séquence soit déclenchée.
Mise à jour - La dernière fois que j'ai utilisé cela, j'ai dû changer l'
.post
appel au code suivant pour faire taire les erreurs.la source
NotificationCenter.default.addObserver(self, selector: #selector(goToDifferentView), name: NSNotification.Name(rawValue: "segue"), object: nil)
Ce que vous voulez faire est vraiment important pour les tests unitaires. Fondamentalement, vous devez créer une petite fonction locale dans le contrôleur de vue. Nommez la fonction n'importe quoi, incluez simplement le
performSegueWithIndentifier
.Changez ensuite votre classe d'utilité
FBManager
Modifiez pour inclure un initialiseur qui prend un argument d'une fonction et une variable pour contenir la fonction de ViewController qui effectue la séquence.(L'init de commodité vous permet de l'utiliser dans les tests unitaires sans exécuter la séquence.)
Enfin, là où vous avez // todo: segue à la vue suivante ???, mettez quelque chose du genre:
Dans vos tests unitaires, vous pouvez simplement l'invoquer comme:
où doThatThing est votre fbsessionstatechange et
UtilClass
est FBManager.Pour votre code réel, passez simplement
localFunc
(sans parenthèses) à la classe FBManager.la source
Cela a fonctionné pour moi.
Tout d'abord, donnez au contrôleur de vue de votre storyboard un ID de storyboard dans l'inspecteur d'identité. Utilisez ensuite l'exemple de code suivant (en vous assurant que la classe, le nom du storyboard et l'ID du storyboard correspondent à ceux que vous utilisez):
Pour plus de détails, voir http://sketchytech.blogspot.com/2012/11/instantiate-view-controller-using.html meilleurs voeux
la source
Vous pouvez faire cette chose en utilisant
performSegueWithIdentifier
function.Syntaxe:
Exemple :
la source
Une autre option consiste à utiliser la séquence modale
ÉTAPE 1: Accédez au storyboard et attribuez au contrôleur de vue un ID de storyboard . Vous pouvez trouver où modifier l'ID du storyboard dans l'inspecteur d'identité sur la droite. Permet d'appeler l'ID du storyboard
ModalViewController
ÉTAPE 2: Ouvrez le contrôleur de vue `` expéditeur '' (appelons-le
ViewController
) et ajoutez-y ce codeNotez que le contrôleur de vue que nous voulons ouvrir est également appelé
ModalViewController
ÉTAPE 3: Pour fermer ModalViewController, ajoutez-y
la source
Cela a fonctionné pour moi:
la source