我对编码非常陌生,无法将数据传递给第二个视图控制器。我想在第二个视图控制器中更改标签,具体取决于第一个视图中按下的按钮(如果您按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.
}
这对我来说对一个按钮有效,但是我不确定如何在等式中添加另一个按钮。任何帮助将不胜感激。
答案 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"
}
}