如何根据按下哪个UIButton将特定文本传递给标签?

时间:2019-07-08 03:09:13

标签: ios swift xcode

我对编码非常陌生,无法将数据传递给第二个视图控制器。我想在第二个视图控制器中更改标签,具体取决于第一个视图中按下的按钮(如果您按art,则标签为“美术馆”,如果按过山车,则标签为“主题公园”)

我尝试将替代功能放在按钮的括号中,但出现错误“只能在类成员上指定替代”

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.
    }

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

3 个答案:

答案 0 :(得分:1)

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

提示: 您实际上可以将此@IBAction func art(_ sender: Any)设置为@IBAction func art(_ sender: UIButton)。代替Any,将其变成UIButton以避免投射。

假设您将多个按钮连接到了art IBAction函数中,则可以通过sender捕获特定的按钮对象,并将该sender传递给{{1} } 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

答案 1 :(得分:1)

首先,将按钮连接到art功能,从属性检查器为按钮添加标签。

现在您的代码将如下所示

@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 :(得分:0)

@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"
     }

    }