【问题标题】:PrepareForSegue not working when called from button's action method (Swift)从按钮的操作方法(Swift)调用时 PrepareForSegue 不起作用
【发布时间】: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 非常感谢!

标签: ios swift


【解决方案1】:

您右键单击故事板中的按钮并拖动到下一个视图。不要在两者之间留下右键单击。您将获得 Action Segue 的选项 - 模型、显示、弹出框、工作表。只需选择显示你就完成了。

这样就可以了。

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
    }
}

【讨论】:

    【解决方案2】:

    如果您在按钮单击操作上调用 self.performSegue(withIdentifier:sender) 方法,那么在情节提要中,您需要这样做..

    不是这个...

    【讨论】:

    • 别忘了嵌入导航控制器,
    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多