How do I preparetoSegue a button command to another ViewController? It seem my calculateButton is giving me an error code.
MainViewController
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"
}
CalculateViewController
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
is a method of CalculateViewController. You have a closure hanging off the end of it when it doesn't accept any arguments accept sender: AnyObject
. Move your logic into the 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"
}
If you want to share the code across multiple controllers you could create an instance variable called var calculateButtonAction: ((UIButton) -> ())?
and then set it in 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"
}
And then call it from CalculatorViewController:
@IBAction func calculateButton(sender: AnyObject) {
if let action = calculateButtonAction {
action(sender)
}
}
Better yet, create a BaseCalculatorViewController and subclass it for your controllers so you can have your subclasses inherit calculateButton
.