2017-03-02 45 views
0

我正在製作一系列註冊頁面,用戶首先會看到一個「使用Facebook創建帳戶」按鈕,將它們記錄下來,然後呈現給用戶他們的基本註冊頁面中充滿了空文本框。但是,我試圖使用從圖形請求收集的用戶值填充這些文本框中的一部分。
如何將Facebook值發送到Xcode 8中的下一個屏幕swift 3

這是第一個屏幕與註冊鍵:

import UIKit 
import FBSDKLoginKit 

class RegisterVC: UIViewController, FBSDKLoginButtonDelegate { 
var fbLoginSuccess = false 

var fbName:String! 
var fbEmail:String! 

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"] 

      func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
      let vc = segue.destination as? CreateAccountVC 
      vc!.email.text = self.fbEmail 
      vc!.fullname.text = self.fbName 
       } 

     } 

     print(result) 
    } 

    performSegue(withIdentifier: "regSegue", sender: RegisterVC.self) 
} 

而這些都是在下一個屏幕上的文本框:

import UIKit 

class CreateAccountVC: UIViewController { 
    @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數據。我不是一個偉大的編碼器,真的和幫助將是有用的。讓我知道如果你有任何解決方案!謝謝。

回答

0

在這個片段中存在的問題:有沒有在當他們的.text屬性正在這裏更新的時刻已經創建

func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
      let vc = segue.destination as? CreateAccountVC 
      vc!.email.text = self.fbEmail 
      vc!.fullname.text = self.fbName 


CreateAccountVC小號文本框,該文本框是nil在這個時間點。
評估將從Graph API檢索的String對象直接傳遞給CreateAccountVC &然後使用它們更新文本字段。

請考慮變形現有實現的東西在這些線路上:

class CreateAccountVC: UIViewController { 
    var fbName:String! 
    var fbEmail:String! 
    @IBOutlet weak var fullname: UITextField! 
    @IBOutlet weak var username: UITextField! 
    @IBOutlet weak var age: UITextField! 
    ... 

上述這裏提到會改變的片段:

func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
       let vc = segue.destination as? CreateAccountVC 
       vc!.fbName = self.fbName 
       vc!.fbEmail = self.fbEmail 
       ... 
+0

但將這些改變填充文本輸入框? – jmoney11944

+0

不,還沒有。通過執行上述更改,我們確保將_data_正確傳播並可靠地傳遞給連續的「ViewController」。現在,我們有'string'數據,我們可以更新我們的textFields/labels等。做這件事的好地方是'-viewDidLoad',我們可以將'textField''text'屬性設置爲接收到'string'對象。 – ystack

+0

在viewdidload中,我只需設置完整的name.text = fbName和電子郵件的相同,但它不會更改文本字段。有什麼建議做什麼? – jmoney11944

相關問題