2015-02-26 2 views
0

Как мне подготовить команду кнопки к другому ViewController? Кажется, мой расчетButton дает мне код ошибки.Команда команды PreparetoSegue для другого ViewController Swift

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) { 

    } 

ответ

1

destViewController.calculateButton представляет собой метод CalculateViewController. У вас есть закрытие, зависающее от конца, когда оно не принимает никаких аргументов, принимающих 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 и подклассифицируйте его для своих контроллеров, чтобы вы могли иметь свои подклассы в herit calculateButton.

+0

На самом деле, я изначально настроил его, как вы уже упоминали ранее, и попросите его работать как есть (на CalculateViewController, однако, я хотел, чтобы вместо этого подготовил мою кнопку. – Coder

+0

Причина: у меня есть 30 разных страниц расчета и не было хочу воссоздать 30 различных ViewController.Я хотел, чтобы команда на кнопке была выведена из MainViewController. Надеюсь, это имеет смысл. – Coder

+0

См. edit. Будет ли это давать вам поведение, которое вы хотите? – kellanburket

Смежные вопросы