如何让一个按钮根据发送的变量连接到多个视图控制器,并发送一个新变量

How to have a button connect to multiple viewcontrollers based on a sent variable, and send a new variable

我试过用多种方式问这个问题,但没有找到任何运气。很难将我的问题压缩成一行。

这是我所在的位置:

  1. viewcontroller1发送一个变量("X"或"Y")给viewcontroller2
  2. viewcontroller2 有一个按钮。
  3. 如果发送到 viewcontroller2 的变量 == "x" viewcontroller2 上的按钮应该执行 segue 到 viewcontroller3,并将其 .title 作为变量发送到该视图控制器
  4. 如果变量 == "y" viewcontroller2 上的按钮应该执行 segue 到 viewcontroller4,并将其 .title 作为变量发送到该视图控制器

我可以执行第 1 步和第 2 步,但不会执行第 3 步和第 4 步。

这是我在 viewcontroller2 上的位置:

 @IBAction func didTapButton(_ sender: Any) {
    if sentvar == "X" {
        performSegue(withIdentifier: "ToVC3", sender: self)
    if sentvar == "Y" {
        performSegue(withIdentifier: "ToVC4", sender: self)

然后在代码的下方,我添加了:

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier) == "ToVC3" {
         let newvar = segue.destination as! VC3
        newvar.var = (sender as! UIButton).title(for: .normal)!

但是……没用。 我不明白如何结合 prepareforsegue 发送变量,以及 performsegue 依赖于先前发送的变量。

如果有帮助的话,我很乐意解释我尝试过的方法以及它是如何失败的,但是我整天都被这个问题困住了,希望有技能的人可以指出我正确的方向。

谢谢!

我不确定我是否完全理解你的问题。

但是您需要查看 prepare for segue 语句。

请看下面的代码。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if sender == ShowVC {
        let yourVc = segue.destination as? YourViewController
        yourVc?.YOUR_VARIABLE = VariableWithDataFromCurrentVc
    }
}

可以用

调用
performSegue(withIdentifier: "ShowVC", sender: self)

然后你只需要检查变量,然后执行 segue 到正确的 VC。

那么在您的 viewController2 中存储 viewController3viewController4 的 segueIdentifier。还要存储一个名为 letter 的变量。所以在 viewController2 中存储这些变量:

var letter = ""
var segueIdentifierThirdVC = "ToVC3"
var segueIdentifierFourthVC = "ToVC4"

当你从 ViewController1ViewController2 时,你需要传递上面的 letter 变量。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.destination == "ToVC1" {
        let viewController2 = segue.destination as? ViewController2
        viewController2.letter = // either x or y
    }
}

然后在您的 ViewController2 中,当您单击按钮并想要继续时,您只需进行以下检查:

func buttonClicked() {
    if letter == "x" {
        self.performSegue(withIdentifier: segueIdentifierThirdVC, sender: nil)
    } else if letter == "y" {
        self.performSegue(withIdentifier: segueIdentifierFourthVC, sender: nil)
    }
}

确保您存储了正确的标识符。

更新
要在 viewController3viewController4 中设置标题标签,请执行以下操作:

viewController3viewController4中存储一个名为:var title = ""

的变量

viewController2 中调用 buttonClicked 函数并启动 performSegue 之后,您可以这样做:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.destination == "ToVC3" {
        let viewController3 = segue.destination as? ViewController3
        viewController3.title = // pass title to ViewController3
    } else if segue.destination == "ToVC4" {
        let viewController4 = segue.destination as? ViewController4
        viewController4.title = // pass title to ViewController4
    } 
}