質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1014閲覧

IGColorPickerを用いたホーム画面の背景色の変更と永続化

tyu

総合スコア17

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/10/29 01:29

前提・実現したいこと

ライブラリのIGColorPickerについてご質問があります。
IGColorPickerを使用して以下のようなことがしたいです。

1、背景色を選択する画面(NextViewController)で色を選択
2、1で選択した色をホーム画面(ViewController)の背景色にする
3、2で変更した背景色をアプリ再起動後もホーム画面の背景色にしたい(userdefaultを使用して背景色を永続化したい)

そして現在分からない内容は以下です。

背景色を選択する画面(NextViewController)で選択した色のデータををどうやってホーム画面(ViewController)に渡すか?

teratailの過去の質問で似たような質問があったのですが、こちらのベストアンサーの内容を読んでもできませんでした。リンク内容
どなたかご教授いただけないでしょうか。

該当のソースコード

swift

1 2import UIKit 3import IGColorPicker 4import RealmSwift 5 6class NextViewController: UIViewController, ColorPickerViewDelegate, ColorPickerViewDelegateFlowLayout { 7 8 @IBOutlet weak var backBtn: UIButton! 9 @IBOutlet weak var colorPickerView: ColorPickerView! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 //画面上部の丸の形を決定するプロパティ 15 //selectedColorView.layer.cornerRadius = selectedColorView.frame.width/3 16 17 18 //画面下部の色を選択する丸の諸々の設定をするプロパティ 19 // Setup colorPickerView 20 colorPickerView.delegate = self 21 colorPickerView.layoutDelegate = self 22 colorPickerView.style = .circle 23 colorPickerView.selectionStyle = .check 24 colorPickerView.isSelectedColorTappable = false 25 colorPickerView.preselectedIndex = colorPickerView.colors.indices.first 26 27 //selectedColorView.backgroundColor = colorPickerView.colors.first 28 } 29 30 @IBAction func backAction(_ sender: Any) { 31 32 33 //ViewControllerへの値渡しが実行できているかを確認する為のコード 34 let preVC = self.presentingViewController as! ViewController 35 preVC.d = 5 36 37 //ViewControllerへ戻る為のコード 38 self.dismiss(animated: true, completion: nil) 39 40 } 41 42 43 // MARK: - ColorPickerViewDelegate 44 //背景色を変えるメソッド 45 func colorPickerView(_ colorPickerView: ColorPickerView, didSelectItemAt indexPath: IndexPath) { 46 47 //NextViewControllerの背景色を変える 48 self.view.backgroundColor = colorPickerView.colors[indexPath.item] 49 50 //ViewControllerの背景色を変える 51 presentingViewController!.view.backgroundColor = colorPickerView.colors[indexPath.item] 52 //userdefaultに保存 53 UserDefaults.standard.set(presentingViewController!.view.backgroundColor, forKey: "white") 54 //デバックエリアで選択した色の形式を表示 55 print(presentingViewController!.view.backgroundColor!) 56 57 } 58 59 60 61 // MARK: - ColorPickerViewDelegateFlowLayout 62 63 func colorPickerView(_ colorPickerView: ColorPickerView, sizeForItemAt indexPath: IndexPath) -> CGSize { 64 return CGSize(width: 48, height: 48) 65 } 66 67 func colorPickerView(_ colorPickerView: ColorPickerView, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 68 return 11 69 } 70 71 func colorPickerView(_ colorPickerView: ColorPickerView, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 72 return 8 73 } 74 75 func colorPickerView(_ colorPickerView: ColorPickerView, insetForSectionAt section: Int) -> UIEdgeInsets { 76 return UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16) 77 } 78 79} 80 81extension UserDefaults { 82 83 func color(forKey key: String) -> UIColor? { 84 85 guard let colorData = data(forKey: key) else { return nil } 86 87 do { 88 return try NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData) 89 } catch let error { 90 print("color error (error.localizedDescription)") 91 return nil 92 } 93 94 } 95 96 func set(_ value: UIColor?, forKey key: String) { 97 98 guard let color = value else { return } 99 do { 100 let data = try NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: false) 101 set(data, forKey: key) 102 } catch let error { 103 print("error color key data not saved (error.localizedDescription)") 104 } 105 106 } 107 108} 109

補足情報(FW/ツールのバージョンなど)

Swift 5.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/10/29 02:36

> 背景色を選択する画面(NextViewController)で選択した色のデータををどうやってホーム画面(ViewController)に渡すか? 現在のコードでも、遷移前の画面(ViewController)の背景色は変わっていますし、d の値も渡っているため、同じような方法で背景色の UIColor も渡っていますから特段問題はないように思えるのですが、具体的に何ができていないのでしょうか。
tyu

2020/10/29 06:43

ご回答ありがとうございます。 具体的には NextViewControllerで選択した色をViewControllerの背景色として保存して、アプリを完全に終了させた後、またアプリを起動した時のViewControllerの背景色をアプリ終了前の色で表示したいのですが、これが出来ません。 例 1.NextViewControllerで赤色を選択 2. ViewControllerの背景色が赤色になる 3.アプリを完全に終了させ、再度アプリを起動 4. ViewControllerの背景色が赤色のままの状態となっている これを実現させたいです。 お手数をおかけしますがご教示お願いします。
guest

回答1

0

ベストアンサー

そこまでご理解であれば、あとは難しいことは何もないかと思います。

viewDidLoad() もしくは viewWillAppear(_:) あたりをこのようにすれば実現できるのではないでしょうか。

Swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 // Do any additional setup after loading the view. 4 view.backgroundColor = UserDefaults.standard.color(forKey: "white") 5 }

投稿2020/10/29 08:10

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyu

2020/10/29 15:48

ご回答ありがとうございます。 ご教授いただいたとおりにコーディングしたところ、実装したかったことが実現できました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問