【问题标题】:How do I pass specific text to a label depending on which UIButton is pressed?如何根据按下的 UIButton 将特定文本传递给标签?
【发布时间】:2019-07-08 03:09:13
【问题描述】:

我对编码非常陌生,并且在将数据传递到第二个视图控制器时遇到了麻烦。我想根据第一个视图控制器中按下的按钮更改第二个视图控制器中的标签(如果您按艺术,标签会显示“艺术博物馆”,如果您按过山车,标签会显示“主题公园”)

我尝试将覆盖函数放入按钮的括号中,但出现错误“只能在类成员上指定覆盖”

firstacCode

class firstacCode: UIViewController {

    @IBAction func art(_ sender: Any) {
        performSegue(withIdentifier: "artSegue", sender: self)
    }


        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let destVC : acCode = segue.destination as! acCode
        destVC.descriptionLabel = "art museum"

    }

acCode

class acCode: UIViewController {

    var descriptionLabel :String = "";

    @IBOutlet weak var descriptionText: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        descriptionText.text = descriptionLabel

        // Do any additional setup after loading the view.
    }

这对我来说适用于一个按钮,但我不确定如何在等式中添加另一个按钮。任何帮助将不胜感激。

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    首先将你的按钮连接到艺术功能,从属性检查器给按钮标签。

    现在您的代码将如下所示

    @IBAction func art(_ sender: UIButton) {
        if sender.tag == 0{
            performSegue(withIdentifier: "mySegue", sender: "art museum")
        }
        if sender.tag == 1{
            performSegue(withIdentifier: "mySegue", sender: "Theme Park")
        }
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc : acCode = segue.destination as! acCode
        vc.destVc = sender as! String
    }
    

    【讨论】:

      【解决方案2】:

      首先,欢迎来到 Stackoverflow。您已经正确地将数据传递给另一个控制器。所以我猜你现在唯一的问题是如何在你的IBAction 函数中处理多个按钮。

      提示: 您实际上可以将这个@IBAction func art(_ sender: Any) 设为@IBAction func art(_ sender: UIButton)。而不是Any,将其转换为UIButton 以避免强制转换。

      假设您将多个按钮连接到该 art IBAction 函数,您可以通过您的 sender 捕获该特定按钮对象并将该 sender 传递给您的 sender 参数 prepareForSegue,或您的情况,我刚刚意识到您的两个按钮可能具有不同的功能,只需将字符串传递给 sender 参数即可。

      所以你的代码会是这样的:

      @IBAction func art(_ sender: Any) {
          performSegue(withIdentifier: "artSegue", sender: "art museum")
      }
      
      @IBAction func rollercoaster(_ sender: Any) {
          performSegue(withIdentifier: "artSegue", sender: "theme park")
      }
      

      在您的prepareForSegue 中,将sender 转换为String

      override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
          let destVC : acCode = segue.destination as! acCode
          destVC.descriptionLabel = sender as! String
      }
      

      【讨论】:

      • 当然没问题。花点时间学习 iOS,并学习如何处理可选项以避免强制解包(例如 sender as!String)。
      【解决方案3】:
      @IBAction func art(_ sender: Any) {
        sender.tag = 1
        performSegue(withIdentifier: "artSegue", sender: self)
      }
      
      @IBAction func art2(_ sender: Any) {
        sender.tag = 2
        performSegue(withIdentifier: "art2Segue", sender: self)
      }
      
      
          override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      
           if(sender.tag == 1){
             let destVC : acCode = segue.destination as! acCode
             destVC.descriptionLabel = "art museum"
           }
      
           if(sender.tag == 2){
             let destVC : acCode = segue.destination as! acCode
             destVC.descriptionLabel = "art2 museum"
           }
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 2012-09-16
        • 1970-01-01
        • 2015-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多