8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Swift] AppDelegateを使ってデータを共有

Posted at

#はじめに
画面間でのデータ共有の方法の1つにAppDelegateを使用する方法があるらしい。
いろんなデータの共有の仕方がありますが、割とシンプルな方法かなと思います。
実際に試してみたので、記事にしてみます。
#AppDelegateとは
全ての画面からアクセスできるようになっているファイルになります。
なので、ここに変数を定義する事でデータを共有する事ができるという訳です。
#使ってみた
今回はTabBarControllerを使用して画面間でのデータ共有をしたいと思います。
青のviewのtextFieldに入力したデータを保存ボタンで黄色のtextFieldに渡します。
スクリーンショット 2020-12-20 11.53.12.png

AppDelagateの中に変数を用意します。
スクリーンショット 2020-12-20 10.57.33.png
ボタンの処理は以下の通りです。
AppDelegateにアクセスするために定数delegateを用意して、定数にアクセスするための処理を入れます。
以下のコードにアクセスしたいので、let delegate = UIApplication.shared.delegate as! AppDelegateとします。
取り出したい変数はAppDelegate型の中にあるので、as!でAppDelegate型に変換して取り出します。(この辺りの説明自信ない)

class AppDelegate: UIResponder, UIApplicationDelegate {

    var shareData:String = ""


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }


}

そして、textFieldに入力された文字をAppDelegateに用意した変数に入れます。

@IBAction func buttonAction(_ sender: Any) {
        let delegate = UIApplication.shared.delegate as! AppDelegate
        delegate.shareData = blueTextField.text!
    }

YellowViewControllerではviewWillAppearを使用して、切り替わるたびにデータを表示するようにします。

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
            let delegate = UIApplication.shared.delegate as! AppDelegate
            yellowTextField.text = delegate.shareData
    }

#今回のコード

import UIKit

class BlueViewController: UIViewController {
    @IBOutlet var blueTextField: UITextField!
   
    @IBAction func buttonAction(_ sender: Any) {
        let delegate = UIApplication.shared.delegate as! AppDelegate
        delegate.shareData = blueTextField.text!

    }
}
import UIKit

class YellowViewController: UIViewController {
    
    @IBOutlet var yellowTextField: UITextField!
    
        override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
            let delegate = UIApplication.shared.delegate as! AppDelegate
            yellowTextField.text = delegate.shareData
    }
}
8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?