2019.04.15
ViewController間での値の受け渡しをAppDelegateを用いて実装する方法を説明します。
今回はボタンで数字を、テキストフィールドで文字を取得し遷移先のViewControllerに値を渡してラベルで表示します。
環境 [xcode 10.2:swift 5.0]
AppDelegateで”数字”と”文字列”を格納する変数を用意します。AppDelegate.swiftに下記のコードを追記してください。
1 2 3 4 5 6 | class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var numberValue : int_fast8_t! var nameValue : String? |
numberValueは数字用の変数で”int_fast8_t”型で、nameValueは文字列用の変数で”String”型で宣言します。 (“int_fast8_t”は整数を256まで入れることができます)
最初に表示させたいViewControllerに数字を入れることができるボタンと、テキストフィールドを配置し、 次の画面には入力した値を表示させるためのラベルを配置します。
そしてコードを記述していきます。最初の画面のViewControllerでは、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import UIKit class ViewController: UIViewController { @IBOutlet weak var nameText: UITextField! var delegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate let oneButtonNumber : int_fast8_t = 1 override func viewDidLoad() { super.viewDidLoad() delegate.numberValue = 0 delegate.nameValue = nil } @IBAction func oneButton(_ sender: Any) { delegate.numberValue = oneButtonNumber } @IBAction func next_Button(_ sender: Any) { delegate.nameValue = nameText.text let second = Second_ViewController() present(second, animated: true, completion: nil) } } |
次の画面のViewControllerでは、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import UIKit class Second_ViewController: UIViewController { @IBOutlet weak var numberLabel: UILabel! @IBOutlet weak var nameLabel: UILabel! let delegate : AppDelegate = UIApplication.shared.delegate as! AppDelegate override func viewDidLoad() { super.viewDidLoad() numberLabel.text = (String(delegate.numberValue)) nameLabel.text = (delegate.nameValue) } } |
これでViewController間での値の受け渡しが実装できました。