ViewController1と2でボタンを押した回数分、ViewController3のラベルの数字が増えていくというものがあります。
ボタンを押した回数は保存したいです。
初めViewController1で押した回数をapp delegateを通ってViewController3に送り、押した回数を表示させます。
次にViewController2で押した回数をapp delegateを通ってViewController3に送り、1で押した回数との合計を表示させたいと思っています。
この時、値を保存するUserDefaultsはどのViewControllerに書けばいいのでしょうか。もちろんボタンを押すのは1だけもあれば2だけもありますし、1→2→1→2と何回も往復することもあります。
結構混乱しているため変な文章になっていたらすいません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
初めViewController1で押した回数をapp delegateを通ってViewController3に送り、押した回数を表示させます。
次にViewController2で押した回数をapp delegateを通ってViewController3に送り、1で押した回数との合計を表示させたいと思っています。
UserDefaults
を使用する場合app delegate
経由で値を渡す必要はありません。
以下の様にすると各画面でボタンを押したものを合計してラベルに表示できます。
Storyboardの配置
Code
swift
1import UIKit 2 3// ViewController1 4class ViewController1: UIViewController { 5 6 @IBAction func pushCountUpButton(_ sender: UIButton) { 7 8 var count = UserDefaults.standard.integer(forKey: "count") 9 count += 1 10 UserDefaults.standard.set(count, forKey: "count") 11 UserDefaults.standard.synchronize() 12 } 13} 14 15// ViewController2 16class ViewController2: UIViewController { 17 18 @IBAction func pushCountUpButton(_ sender: UIButton) { 19 20 var count = UserDefaults.standard.integer(forKey: "count") 21 count += 1 22 UserDefaults.standard.set(count, forKey: "count") 23 UserDefaults.standard.synchronize() 24 } 25} 26 27// ViewController3 28class ViewController3: UIViewController { 29 30 @IBOutlet weak var countLabel: UILabel! 31 32 override func viewDidLoad() { 33 super.viewDidLoad() 34 35 let count = UserDefaults.standard.integer(forKey: "count") 36 countLabel.text = "\(count)" 37 } 38}
★ おまけ
各画面に同じ処理を書くのが単調なのでどこかに処理をまとめるとスッキリします。
以下はUserDefaults
のextension
としてまとめました。
参考にしてみてください。
swift
1import UIKit 2 3class ViewController1: UIViewController { 4 5 @IBAction func pushCountUpButton(_ sender: UIButton) { 6 7 // 拡張したUserDefaultsメソッドを呼び出し 8 UserDefaults.standard.countUp() 9 } 10} 11 12class ViewController2: UIViewController { 13 14 @IBAction func pushCountUpButton(_ sender: UIButton) { 15 16 // 拡張したUserDefaultsメソッドを呼び出し 17 UserDefaults.standard.countUp() 18 } 19} 20 21class ViewController3: UIViewController { 22 23 @IBOutlet weak var countLabel: UILabel! 24 25 override func viewDidLoad() { 26 super.viewDidLoad() 27 28 // 拡張したUserDefaultsメソッドを呼び出し 29 countLabel.text = "\(UserDefaults.standard.getCount())" 30 } 31} 32 33 34// UserDefaultsを拡張 35extension UserDefaults { 36 37 // Keyを定義 38 var countKey: String { 39 return "count" 40 } 41 42 // CountをUpするメソッド 43 func countUp() { 44 var count = UserDefaults.standard.integer(forKey: self.countKey) 45 count += 1 46 UserDefaults.standard.set(count, forKey: self.countKey) 47 UserDefaults.standard.synchronize() 48 } 49 50 // 現在のCountを取得する 51 func getCount() -> Int { 52 return UserDefaults.standard.integer(forKey: self.countKey) 53 } 54 55 // Countをリセット 56 func resetCount() { 57 UserDefaults.standard.set(0, forKey: self.countKey) 58 UserDefaults.standard.synchronize() 59 } 60}
投稿2016/11/24 21:26
編集2016/11/24 22:15総合スコア8490
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/25 11:22
2016/11/25 22:59