我有两个视图控制器,第一个有两个按钮,注册和登录,第二个VC做注册和登录的功能(我写了在注册和登录模式之间切换的功能),是否可以确定用户在第一个VC中是否按下了登录/注册按钮,以便在执行segue时在第二个VC中调用正确的函数?

最佳答案

您已经告诉第二个视图控制器在第一个选择的视图控制器选项(登录或注册)上要做什么。我假设您可以通过简单地声明一个标志并将其发送到第二个视图控制器来完成此操作,例如:
在第二个视图控制器中声明一个布尔变量(比方说shouldBehavesAsLogin),这意味着如果选择登录,那么它应该是true

// Controller that could represents signin or signup:
class SecondViewController: UIViewController {
    //...

    var shouldBehavesAsLogin = false

    // ...
}

因此,您可以根据点击的按钮(第一个视图控制器)确定应分配给它的值是什么:
class FirstViewController: UIViewController {
    // ...

    private var isLoginTapped = false
    @IBAction func signinTapped(sender: UIButton) {
        isLoginTapped = true
    }

    @IBAction func signupTapped(sender: UIButton) {
        // nothing to do here, isLoginTapped is false by default...
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "MySegue"{
            if let nextViewController = segue.destination as? SecondViewController {
                nextViewController.shouldBehavesAsLogin = isLoginTapped
            }
        }
    }

    // ...
}

因此,您所要做的就是检查shouldBehavesAsLogin的值,无论是让控制器以登录的方式运行还是以相反的方式运行。
附加提示:
如果为每个按钮添加IBActions的目的只是导航到第二个视图控制器,我建议让两个按钮都具有相同的IBAction,但是您应该让true的类型为false,而不是sender,因此您可以这样做,例如:
@IBAction func aButtonTapped(sender: UIButton) {
    // do the default behvior for both signin and signup (navigate to the second controller)

    // signinButton is the button you tap for navigating to second controller to behaves as signin
    isLoginTapped = sender === signinButton ? true : false
}

关于ios - 如何在目标 View Controller 上识别序列标识符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48487255/

10-11 16:22