【问题标题】:how to pass data to multiple viewcontrollers from the same button如何从同一个按钮将数据传递给多个视图控制器
【发布时间】:2017-05-28 15:12:23
【问题描述】:

这是 stackoverflow 上最受欢迎的问题之一的另一个版本。对不起。谢谢。

我有一个有 30 个按钮的视图控制器。根据从前一个视图控制器发送的变量,这些按钮中的每一个都可以连接到 20 个视图控制器中的一个。

我知道如何将数据从一个视图控制器发送到另一个视图控制器,并且我知道如何根据传递的变量将按钮连接到多个视图控制器,但我不知道如何将变量从按钮传递到任何视图控制器从变量中指定...

我的视图控制器如下所示:

@IBAction func didTapButton(_ sender: UIButton) {
    if passedvariable == "A" {
        performSegue(withIdentifier: "ToA", sender: self)
    if passedvariable == "B" {
        performSegue(withIdentifier: "ToB", sender: self)
    }

我尝试添加类似这样的内容...

@IBAction func didTapButton(_ sender: UIButton) {
    if passedvariable == "A" {
        performSegue(withIdentifier: "ToA", sender: self)       
            let send = segue.destination as! AViewController
            send.NewVariableToSend = (sender as! UIButton).title(for: .normal)!}
    }

但这不起作用......我觉得我很接近但还无法连接点。非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: swift xcode segue viewcontroller


    【解决方案1】:

    您如何从UIButton 的 IBAction 方法访问实际的 segue? 这种方法是错误的。使用PrepareForSegue 方法将您的数据传递给下一个 ViewController。它是一个预定义的方法,因此您只需在 ViewController 类中覆盖此方法即可。

    试试这个.. 注意: 如果您尝试将任何 nil 值传递给您的下一个 ViewControllerguard let 用于消除崩溃。

    @IBAction func didTapButton (_ sender: Any) {
            //First get the clickedButton Object if you do not have IBOutlet of that button
            guard let clickedButton = sender as? UIButton else {return}
            //Pass the clicked button to Segue perform as a sender
            self.performSegue(withIdentifier: "yourSegueIdentifier", sender: clickedButton)
    
        }
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "yourSegueIdentifier" {
                //Now get you destination viewcontroller and type cast it into your desired ViewController class
                guard let nextVC = segue.destination as? YourViewController else {return}
                //Now convert the sender into your clicked button because you have previously set the clickedButton as sender when you try to perform this segue
                guard let clickedButton = sender as? UIButton else {return}
                //Now Simply assign this to nextVC
                nextVC.button = clickedButton
            }
    
        }
    

    【讨论】:

    • 感谢您的回复!仍然肯定弄清楚了...如何获得 clickedButton 对象?
    • 在你点击按钮的 IBAction 中有一个名为 sender 的参数。这将自动带来点击的按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多