PreparetoSegue 按钮命令到另一个 ViewController Swift

PreparetoSegue Button Command to Another ViewController Swift

如何准备将按钮命令转至另一个 ViewController?我的 calculateButton 似乎给我一个错误代码。

主要ViewController

if (segue.identifier == "toCalculate") {

            let destViewController : CalcualteViewController = segue.destinationViewController as CalcualteViewController

            destViewController.calculateButton(sender: UIButton) {

                let dataone = data1.text.toInt() ?? 0

                let datatwo = data2.text.toInt() ?? 0

                let answercalculation = dataone * datatwo

                answer.text = "\(answercalculation)" + " psi"

            }

计算ViewController

class CalcualteViewController: UIViewController {

    @IBOutlet weak var textlabel: UILabel!

    @IBOutlet var answer: UITextField!

    @IBOutlet var data1: UITextField!

    @IBOutlet var data2: UITextField!

    @IBAction func calculateButton(sender: AnyObject) {

    }

destViewController.calculateButton是CalculateViewController的一个方法。当它不接受任何参数 accept sender: AnyObject 时,你有一个闭包挂在它的末尾。将您的逻辑移动到 CalculateViewController.

@IBAction func calculateButton(sender: AnyObject) {
       let dataone = data1.text.toInt() ?? 0
       let datatwo = data2.text.toInt() ?? 0
       let answercalculation = dataone * datatwo
       answer.text = "\(answercalculation)" + " psi"
}

如果您想在多个控制器之间共享代码,您可以创建一个名为 var calculateButtonAction: ((UIButton) -> ())? 的实例变量,然后将其设置为 prepareForSegue:

destinationViewController.calculateButtonAction = { (sender) in
   let dataone = destinationViewController.data1.text.toInt() ?? 0
   let datatwo = destinationViewController.data2.text.toInt() ?? 0
   let answercalculation = dataone * datatwo
   destinationViewController.answer.text = "\(answercalculation)" + " psi"
}

然后从 CalculatorViewController 调用它:

@IBAction func calculateButton(sender: AnyObject) {
     if let action = calculateButtonAction {
        action(sender)
     }
}

更好的是,创建一个 BaseCalculatorViewController 并将其子类化为您的控制器,这样您就可以让您的子类继承 calculateButton