【问题标题】:Taking Facebook values (email, name, etc) from one view controller and transferring them to another one从一个视图控制器获取 Facebook 值(电子邮件、姓名等)并将它们传输到另一个视图控制器
【发布时间】:2017-07-21 08:34:03
【问题描述】:

所以我目前正在设计一个应用程序并正在处理帐户注册。我已经在其中实现了 Facebook 登录,但我无法获取用户的 Facebook 信息并将其传输到下一页,理想情况下,姓名和电子邮件字段将填充从 Facebook 收到的那些值。

Facebook 登录的初始页面如下所示:

class RegisterVC: UIViewController, FBSDKLoginButtonDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    let loginButton = FBSDKLoginButton()
    view.addSubview(loginButton)
    loginButton.frame = CGRect(x: 82, y: 325, width: view.frame.width - 210, height: 59)

    loginButton.delegate = self
}

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
    print("Did log out of facebook")
}

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    if error != nil {
        print(error)
        return
    }
    print("Successfully logged in")

    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start {(connection, result, err) in
        if err != nil {
            print("Failed to start graph request", err)
            return
        } else {

            guard let data = result as? [String:Any] else {return}

            let fbEmail = data["email"]
            let fbName  = data["name"]
        }

        print(result)
    }

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    //get destination view an set the fullname

        let vc = segue.destination as? CreateAccountVC
        vc?.email = self.fbEmail
        vc.fullname = self.fbName

}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

下一个视图控制器,一个典型的注册页面,有这些文本字段:

@IBOutlet weak var fullname: UITextField!
@IBOutlet weak var username: UITextField!
@IBOutlet weak var age: UITextField!
@IBOutlet weak var email: UITextField!
@IBOutlet weak var verifyEmail: UITextField!
@IBOutlet weak var password: UITextField!
@IBOutlet weak var verifyPassword: UITextField!

我不知道如何从 Facebook 获取值并将它们放入这些文本输入框中。我对编程很陌生,所以非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: swift xcode facebook swift3 facebook-php-sdk


    【解决方案1】:

    首先,将 FB 值存储在您以后可以访问的 var(s) 中。

    接下来,您可以在过渡之前设置下一个视图的值。例如,如果您使用的是 segue,则可以在 prepareForSegue 中这样做:

    class RegisterVC: UIViewController, FBSDKLoginButtonDelegate {
    
    var fbName:String?
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      //get destination view an set the fullname
      let vc=segue.destination as? MyCustomVC
      vc.fullName=self.fbName 
    }
    

    【讨论】:

    • 这听起来可能很愚蠢,但这是在 RegisterVC(上面的第一段代码)还是包含我的文本输入框的 VC 中?
    • 它会出现在第一个视图中。
    • 我使用了这段代码,它给了我错误“UIViewController 类型的值没有成员“email”。我这样设置变量:let fbEmail : NSString? = data["email"] !as?NSString
    • 您需要将其转换为您的自定义视图控制器类,以便它知道您创建的条形图
    • 伙计,我真的很感谢你的帮助,你就是那个人。我仍然收到错误,我在 loginButton 函数中声明了 Facebook 值,如下所示“let fbEmail = data["email"]”,但是,当我运行代码时,我收到一条错误消息,指出“RegisterVC 类型的值没有会员 fbEmail。我要更新我的代码,对不起,我是堆栈溢出的新手哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多