【发布时间】:2018-03-08 11:01:13
【问题描述】:
我是 iOS 新手。我想要的是,当用户成功注册时,应该出现下一个视图控制器。我为此目的使用的是prepareForSegue。用户正在成功登录。调试显示 prepareForSegue 也被调用,但没有显示下一个屏幕。我还想将我的“用户”变量与 segue 一起发送。这是我的代码。
@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
}
}
任何帮助将不胜感激。
附言 我正在使用 Swift 3、Xcode 8。
【问题讨论】:
-
您的身份验证方法可能是异步运行的,因此您需要使用
DispatchQueue.main.async { \\ your code to perform segue }从主线程调用 self.performSegue -
@kinza 你写了
self.performSegue(withIdentifier:sender)按钮点击动作的方法。在这种情况下,您需要创建从第一个视图控制器到第二个视图控制器的转场,而不是从按钮到第二个视图控制器。 -
我应该在哪里(在代码中)写这个? @VineetRavi
-
@LeoDabus 的评论对我有用。我应该在 DispatchQueue.main.async { } 中写 self.segue 非常感谢!