Swift 如何对UIButton的标题进行编码以在两个视图控制器之间进行更改?

Swift 如何对UIButton的标题进行编码以在两个视图控制器之间进行更改?,swift,uibutton,segue,viewcontroller,swift5,Swift,Uibutton,Segue,Viewcontroller,Swift5,这是我所拥有的,但它不起作用。我希望vc3上的BB按钮根据VC2上显示的图像更改标题 @IBAction func buttonPressed(_ sender: UIButton) { func prepare(for segue: UIStoryboardSegue, sender: Any?) { if imageDisplayed == UIImage(named: "sad") && segue.identifier == "goToActiv

这是我所拥有的,但它不起作用。我希望vc3上的BB按钮根据VC2上显示的图像更改标题

@IBAction func buttonPressed(_ sender: UIButton) {

    func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if imageDisplayed == UIImage(named: "sad") && segue.identifier == "goToActive"{
        let vc3 = segue.destination as! ThirdViewController
            vc3.buttonTitle.titleLabel?.text = "no"
    }
else if imageDisplayed == UIImage(named: "happy") && segue.identifier == "goToActive" {
let vc3 = segue.destination as! ThirdViewController
    vc3.buttonTitle.titleLabel?.text = "happy"


} }

在iAction中,调用performsgue

@IBAction func buttonPressed(_ sender: UIButton) {
    performSegue(withIdentifier: "goToActive", sender: nil)  
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if imageDisplayed == UIImage(named: "sad") && segue.identifier == "goToActive"{
        let vc3 = segue.destination as! ThirdViewController
        vc3.buttonTitle.("no", for: .normal)
    }
    else if imageDisplayed == UIImage(named: "happy") && segue.identifier == "goToActive" {
        let vc3 = segue.destination as! ThirdViewController
        vc3.buttonTitle.("happy", for: .normal)
    }
}

首先,在
ThirdViewController
中创建一个名为
text
的属性,并在
viewDidLoad()
中将其设置为
buttonTitle的
标题

class ThirdViewController: UIViewController {
    @IBOutlet weak var buttonTitle: UIButton!
    var text: String?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.buttonTitle.setTitle(self.text, for: .normal)
    }
}
这是因为,在调用
viewDidLoad()
之前,不会设置IBOutlet。因此,访问
vc2
中的
按钮将导致运行时异常

接下来,您的
SecondViewController
应该如下所示:

class SecondViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let vc3 = segue.destination as? ThirdViewController {
            var buttonTitle: String?
            switch self.imageView.image {
            case UIImage(named: "sad"): buttonTitle = "no"
            case UIImage(named: "happy"): buttonTitle = "happy"
            default: break
            }
            vc3.text = buttonTitle
        }
    }
}
在上述代码中

  • prepare(for:sender:)
    中,根据
    imageView的
    图像设置
    vc3
    文本

  • 无需创建按下的按钮(:)
  • iAction
    。所有这些都将在
    prepare(for:sender:)
    自身中处理