2017-09-27 80 views
0

我是iOS中的新手。我想要的是當用戶成功註冊後,下一個視圖控制器應該出現。我爲此使用的是prepareForSegue。用戶正在成功登錄。調試顯示prepareForSegue也被調用,但它不顯示下一個屏幕。我也想發送我的「用戶」變量以及segue。這是我的代碼。從按鈕的操作方法調用PrepareForSegue時不工作(Swift)

@IBAction func signUpTapped(_ sender: AnyObject!) { 

     let password = "password" 

     phone?.name = "phone_number" 
     phone?.value = "######" 

     email?.name = "email" 
     email?.value = "######" 

     attributes.append(phone!) 
     attributes.append(email!) 

     let userPool = appDelegate.userPool; 

     userPool?.signUp("user7", password: password, userAttributes: attributes, validationData: nil).continueWith { (task) -> Any? in 

      print("Successfully registered user: \(task.result!.user)"); 
      print("error: \(task.error)"); 
      self.user = task.result!.user 
      self.performSegue(withIdentifier: "toConfirmationCodeScreen", sender: self) 
      return nil 
     } 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if (segue.identifier == "toConfirmationCodeScreen") { 
      let secondViewController = segue.destination as! ConfirmationCodeViewController 
      let user = sender as! AWSCognitoIdentityUser 
      secondViewController.user = self.user 
     } 
    } 

任何幫助將不勝感激。

詩 我使用的斯威夫特3,Xcode中8

+0

https://stackoverflow.com/a/41887007/5461400 @kinza –

+1

身份驗證方法可能異步運行,所以你需要使用'DispatchQueue.main.async {主線程中調用self.performSegue \\您的代碼執行segue} –

+0

@kinza您已經編寫了'self.performSegue(withIdentifier:sender)'方法來實現按鈕點擊操作。在這種情況下,您需要創建從第一個viewcontroller到第二個viewcontroller的segue,而不是從按鈕到第二個viewcontroller。 –

回答

0

如果您呼叫按鈕點擊動作self.performSegue(withIdentifier:sender)方法,然後在故事板,你需要做的.. enter image description here

不是這個.. enter image description here

+0

不要忘記嵌入導航控制器, –

0

右鍵單擊故事板中的按鈕並拖動到下一個視圖。不要在中間點擊鼠標右鍵。您將獲得Action Segue - Model,Show,popover,sheet的選項。只需選擇顯示你已完成。

然後這工作正常。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "toConfirmationCodeScreen") { 
     let secondViewController = segue.destination as! ConfirmationCodeViewController 
     let user = sender as! AWSCognitoIdentityUser 
     secondViewController.user = self.user 
    } 
}