1
votes

SDK Facebook: UINavigationController n'a pas de membre 'push'

J'utilise le SDK de Facebook pour permettre à un utilisateur de se connecter à mon application via Facebook. Le bouton de connexion fonctionne parfaitement. Il permet à l'utilisateur de se connecter et de se déconnecter et le bon profil est trouvé. Cependant, lorsque l'utilisateur se connecte, j'ai besoin que l'application affiche un contrôleur de vue différent, voici le code ci-dessous:

override func viewDidLoad()
    {
        super.viewDidLoad()
        
        var loginButton = FBLoginButton(permissions: [ .publicProfile ])
        
        let screenSize:CGRect = UIScreen.main.bounds
        let screenHeight = screenSize.height // real screen height
        //let's suppose we want to have 10 points bottom margin
        let newCenterY = screenHeight - loginButton.frame.height - 20
        let newCenter = CGPoint(x: view.center.x, y: newCenterY)
        loginButton.center = newCenter

        view.addSubview(loginButton)
        
        if(AccessToken.current != nil) {
            let storyboard = UIStoryboard(name: "Logged In", bundle: nil)
            let vc = storyboard.instantiateViewController(withIdentifier: "Logged In")
            self.navigationController?.push(vc, animated: true) // this is the error line
        }
        
        // Extend the code sample "1. Add Facebook Login Button Code"
        // In your viewDidLoad method:
        loginButton = FBLoginButton(permissions: [ .publicProfile, .email, .userFriends ])
    }

Voici le message d'erreur: La valeur de type 'UINavigationController' n'a pas de membre 'push'

J'utilise la dernière version du SDK. Alors je ne sais pas ce qui ne va pas?


4 commentaires

vous devez utiliser self.navigationController? .pushViewController (vc, animated: true)


self.navigationController? .pushViewController (vc, animé: vrai)


Cela a corrigé l'erreur, mais il n'ira pas au contrôleur d'affichage suivant. Il s'intitule «Scène connectée» et le contrôleur de vue s'appelle «Connecté», des idées pour résoudre ce problème?


Veuillez vérifier le nom de votre storyboard et afficher le nom du contrôleur.


5 Réponses :


1
votes

Avez-vous essayé de l'utiliser? -

self.present(vc, animated: true, completion: nil)

UPD:

self.navigationController?.pushViewController(vc, animated: true)


1 commentaires

Cela a corrigé l'erreur, mais il n'ira pas au contrôleur d'affichage suivant. Il s'intitule «Scène connectée» et le contrôleur de vue s'appelle «Connecté», des idées pour résoudre ce problème?



1
votes

Essayez ceci.

self.navigationController?.pushViewController(vc, animated: true)


2 commentaires

Cela a corrigé l'erreur, mais il n'ira pas au contrôleur d'affichage suivant. Il s'intitule «Scène connectée» et le contrôleur de vue s'appelle «Connecté», des idées pour résoudre ce problème?


imprimez votre objet navigationController. Cela peut être nul.



1
votes

Au lieu de la méthode push () , vous devrez utiliser la méthode pushViewController ()

        let storyboard = UIStoryboard(name: "LoggedIn", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "Logged In")
        self.navigationController?.push(vc, animated: true) 

Remarque: - p >

Le nom de fichier de votre storyboard ne peut pas contenir d'espace, veuillez supprimer cet espace. Renommez le nom de votre fichier storyboard en "LoggedIn" ou "Logged_In".

self.navigationController?.pushViewController(vc, animated: true). 

Comment vérifier le nom du storyBoard et afficher l'identifiant du contrôleur?

entrez description de l'image ici


2 commentaires

Cela a corrigé l'erreur, mais il n'ira pas au contrôleur d'affichage suivant. Il s'intitule «Scène connectée» et le contrôleur de vue s'appelle «Connecté», des idées pour résoudre ce problème?


Vérifiez que votre fichier storyBoard est le même que "Connecté" et que l'identifiant de viewcontroller est sam comme "" Connecté "



2
votes

Vous devez utiliser self.navigationController? .pushViewController (VC, animated: true) au lieu de push

let vc = self.storyboard?.instantiateViewController(withIdentifier: "Logged In") as NextViewController
        self.navigationController?.pushViewController(VC, animated: true)


2 commentaires

Cela a corrigé l'erreur, mais il n'ira pas au contrôleur d'affichage suivant. Il s'intitule «Scène connectée» et le contrôleur de vue s'appelle «Connecté», des idées pour résoudre ce problème?


Vous devez naviguer à partir du storyboard principal pour pouvoir utiliser self.storyboard? .InstantiateViewController (withIdentifier: "Logged In") comme yourViewController // yourViewController - contrôleur de vue suivant après vous être connecté



0
votes

Au lieu de push () écrivez sous la ligne

vc.title = "Logged In"

Pour changer le titre de l'écran, vous devez définir la propriété title du deuxième écran,

self.navigationController?.pushViewController(vc, animated: true)


0 commentaires