ios - 如何让一个按钮根据发送的变量连接到多个 View Controller ,并发送一个新变量

标签 ios swift segue viewcontroller

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

这是我所在的地方:

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

我可以执行第 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 依赖于先前发送的变量。

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

谢谢!

最佳答案

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

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

当你从 ViewController1 转到 ViewController2 时,你需要传递上面的 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
    } 
}

关于ios - 如何让一个按钮根据发送的变量连接到多个 View Controller ,并发送一个新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44232389/

相关文章:

ios - 如何以编程方式在 Safari 中启用 "Allow Remote Automation"

ios - 如何向 MapKit CallOuts Swift 3 添加按钮

ios - 使用 JSON 格式从网站获取数据

ios - 平移手势识别器选择器不起作用

ios - 从 View Controller MapKit 传递数据

android - Cordova 和 Angular : plugins not working

iOS UIImage 不显示 JPEG 图像

ios - mvvm 中的 UITextfield 委托(delegate)方法

swift - 过渡到 UITabBarController

ios - 自定义 segue 打破其他 segue