11日目：チップ計算アプリで、segueを学ぶ

#11日目のアプリ 
チップ計算アプリで、segueを学ぶ

##以下の流れで作りました。
1. 画面を2つ用意する。
2. 各画面にオブジェクトを配置して、Viewcontrolerに紐付け
3. stepパーツ、テキストフィールド入力、選択ボタンで入力する数値を取得
4. 計算結果を別のView に表示するようにsegueを設置
5. 数値を受け渡す。

##できたこと
+ テキストフィールドに入力した内容を取得して利用
+ 別画面に値を渡す
+ 別画面を閉じる。
 
##書いたコードを共有します！


▼▼▼CalculatorViewController.swift

```
import UIKit

class CalculatorViewController: UIViewController, UITextFieldDelegate {
    
    
    @IBOutlet weak var billTextField: UITextField!
    @IBOutlet weak var zeroPctButton: UIButton!
    @IBOutlet weak var tenPctButton: UIButton!
    @IBOutlet weak var twentyPctButton: UIButton!
    @IBOutlet weak var splitNumberLabel: UILabel!
    
    var nameOfPressedButton: String = "0%"
    var setValue: Float = 0.0 //チップのパーセンテージ
    var setPeopleNumbers: Double = 2.0 //人数
    
    var totalCost: Int = 0
    
    
    
//    func viewDidLoad() {
    //        super.viewDidLoad()
    //        // Do any additional setup after loading the view.
    //    }
    
    @IBAction func tipChanged(_ sender: UIButton) {
        billTextField.endEditing(true)
        updateUI()
        sender.isSelected = true //押したボタンをtrueにする
        nameOfPressedButton = sender.currentTitle ?? "0%"  //ボタン名を取得して格納する。nil対応も入れておく。
        
        //各ボタンを押した時に数値を設定する
        switch nameOfPressedButton {
        case "0%":
            setValue = 0.0
            
        case "10%":
            setValue = 0.1
            
        case "20%":
            setValue = 0.2
            
        default:
            print("not selected.")
        }
    }
    
    @IBAction func stepperValueChanged(_ sender: UIStepper) {
        billTextField.endEditing(true)
        setPeopleNumbers = sender.value
        splitNumberLabel.text = String(format: "%.0f", setPeopleNumbers)
        
    }
    
    @IBAction func totalCost(_ sender: UITextField) {
        billTextField.clearButtonMode = .always
        billTextField.keyboardType = .phonePad
        billTextField.resignFirstResponder()
        
    }
    
    @IBAction func calculatePressed(_ sender: UIButton) {
        
        totalCost = Int(billTextField.text!) ?? 0
        print(totalCost)
        print(setValue)
        print(setPeopleNumbers)
        
        print(Float(totalCost) * Float((1 + setValue)) / Float(setPeopleNumbers))
        
        billTextField.endEditing(true) //テキストフィールドをアンアクティブにする
        
        //結果をセグエ"goToResult"へ持たせてあげる。
                performSegue(withIdentifier: "ResultScreen", sender: self)
    
        
    }
    
    //結果を見るボタンを押したときに、該当するセグエがあったら処理する。を記述。
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        //もしセグエが"goToResult"だったら以下をする。
        if segue.identifier == "ResultScreen" {

            //定数を作って、それに値を入れて、計算結果ResultViewControllerの変数に渡してあげる準備。
            let destinationVC = segue.destination as! ResultViewController

            //計算結果画面にある変数に計算して返ってきた数値を入れる。
            destinationVC.peopleValue = String(setPeopleNumbers)
            destinationVC.tipValue = String(setValue * 100)
            destinationVC.costValue = String(Float(totalCost) * Float((1 + setValue)) / Float(setPeopleNumbers))
        }
    }
    
    func updateUI() {
        //まずはすべてのボタンを未選択状態にする
        zeroPctButton.isSelected = false
        tenPctButton.isSelected = false
        twentyPctButton.isSelected = false 
    }
    
    
}
```

▼▼▼ResultViewController.swift

```
import UIKit

class ResultViewController: UIViewController {
    
    //紐付け
    @IBOutlet weak var totalLabel: UILabel!
    @IBOutlet weak var settingLabel: UILabel!
    
    var peopleValue: String? //設定数値（人数）
    var tipValue: String? //設定数値（パーセンテージ）
    var costValue: String? //計算結果
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //計算結果の数値、テキスト情報を変える。
//        settingLabel.text = "Split between \(String(peopleValue!)) people, with \(tipValue ?? "0%") tip."
        settingLabel.text = "人数は\(peopleValue ?? "0")人。　チップは\(tipValue ?? "0")%。"
        
        totalLabel.text = costValue
        
        
    }
    

    @IBAction func recalculatePressed(_ sender: UIButton) {
        //画面を閉じるボタンを押したら画面を閉じる時のコード
        dismiss(animated: true, completion: nil)
    }
    
}
```

##感想
複数の画面に遷移する方法がわかった！これでもっとできることが増えた！