前提・実現したいこと
Swiftにて開発をしている初心者エンジニアです。
チェックボックスの状態をボタンの数だけforkeyを作って、userdefaultsに保存したいと考えています。
①xibファイルで作ったセルの中にUIボタン(チェックボタン)を配置。
↓
②webから受け取ったjsonファイルの中にあるWP記事の数だけ、tableViewでセルを作る。
↓
③セルの数だけボタンができる。
↓
④チェックボタンを実現するための、画像を出し入れするクラス作成(該当のソースコード)。
↓(⑤で詰まっています。)
⑤各セルのチェックボタンの状態をuser defaultsに登録したい。
「forkeyに入れる部分を変数にしてfor文で回すのかな」ということを考えつきましたが、
具体的な書き方がわからずに詰まってしまったので、質問させていただきました。
わかりにくい質問で申し訳ありませんが、教えて頂けると助かります。
該当のソースコード
Swift5
1import Foundation 2import UIKit 3 4//ボタンの画像を出し入れするためのクラス 5class CheckButton: UIButton { 6 7 //チェックされていない状態の画像(b-check1)とチェックされた後の画像(b-check2) 8 let checkedImage = UIImage(named: "b-check2")! as UIImage 9 let uncheckedImage = UIImage(named: "b-check1")! as UIImage 10 let ud = UserDefaults.standard 11 var status = "checkStatus" 12 13 14 // Bool property 15 var isChecked: Bool = false { 16 didSet{ 17 if isChecked == true { 18 self.setImage(checkedImage, for: UIControl.State.normal) 19 } else { 20 self.setImage(uncheckedImage, for: UIControl.State.normal) 21 } 22 //ボタンの状態を保存するudをセット。 23 ud.set(isChecked, forKey: status) 24 25 } 26 } 27 28 override func awakeFromNib() { 29 self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControl.Event.touchUpInside) 30 31 self.isChecked = ud.bool(forKey: status) 32 33 } 34 35 36 @objc func buttonClicked(sender: UIButton) { 37 if sender == self { 38 isChecked = !isChecked 39 } 40 } 41 42 43 44} 45
該当のソースコードで起きること
①チェックボタンを一つタップする。
↓
②アプリをタスクキルする。
↓
③タップしたチェックボタンの状態が、全ボタンに反映されてしまう。
原因
全ボタンとforkeyがユニークでないためだと考えられる。
補足情報
xcodeのバージョン:11.1
swift5
要領の悪い伝え方となっているかもしれませんが、
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/08 12:18
退会済みユーザー
2020/04/08 12:36
2020/04/09 01:30
退会済みユーザー
2020/04/09 06:48
2020/04/11 15:32