前提・実現したいこと
ライブラリの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
回答1件
あなたの回答
tips
プレビュー