前提・実現したいこと
swiftでトレーニングメニューを表示するアプリを作っています。
ViewTableCellにUISwitchをAccessoryViewで追加しています。
Switchをonにすると該当の行の種目名と紐づいたfavos[i].favに1が代入されます。offにすると0です。変数はjsonファイルを読み書きし保存しています。
画像のページから前に戻り,またこのページを生成した時その変数(favos[i].fav)が0か1かによって各セルのUISwitchのon,offを変えて表示したいです。
発生している問題・エラーメッセージ
どのSwitchが何行目のセルに属しているのか判別できず,すべてのSwitchがonになってしまいます。
Switchのon,offを個別に設定する方法を教えて欲しいです。
該当のソースコード
swift
1/*TableViewCellの描画部分*/ 2 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 3 let cell: UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "events") 4 let item = items.filter{$0.part == tappedPart}[indexPath.row]//押されたボタンの部位の配列の中身をitemに代入する。 5 cell.textLabel?.text=item.name 6 let Switch = UISwitch() 7 cell.accessoryView = Switch 8 Switch.tag = indexPath.row 9 Switch.addTarget(self, action: #selector(pushedSwitch(_:)), for: UIControl.Event.valueChanged) 10 11 for i in 0..<favos.count{ 12 if(favos[i].fav == 1){ 13 Switch.isOn = true 14 } 15 } 16 return cell 17 } 18/*Switchが押された時の処理*/ 19 @objc func pushedSwitch(_ sender: UISwitch){ 20 //print("indexPathRow") 21 //print(sender.isOn) 22 //print(sender.tag) 23 let item = items.filter{$0.part == tappedPart}[sender.tag] 24 if (sender.isOn == true){ 25 print(item.name) 26 for i in 0..<favos.count{ 27 print(favos[i].name) 28 if(favos[i].name == item.name){ 29 favos[i].fav = 1 30 print(favos[i]) 31 break 32 } 33 if(i == favos.count - 1){ 34 let name = item.name 35 favos.append(Favorite(name: name ,fav: 1)) 36 print(favos) 37 } 38 } 39 }else{ 40 for i in 0..<favos.count{ 41 if(favos[i].name == item.name){ 42 favos[i].fav = 0 43 print(favos[i]) 44 } 45 } 46 } 47 48 } 49/*ファイルの保存部分*/ 50 override func viewWillDisappear(_ animated: Bool) { 51 super.viewWillDisappear(animated) 52 guard let url = Bundle.main.url(forResource: "favorite", withExtension: "json") else { fatalError("ファイルが見つかりません") } 53 guard let data = try? JSONEncoder().encode(favos) else{ 54 fatalError("ファイル読み込みエラー") 55 } 56 print(data) 57 do{ 58 try data.write(to: url) 59 }catch{ 60 fatalError("ファイル書き込みエラー") 61 } 62 }
補足情報(FW/ツールのバージョンなど)
Xcode ver.12.3
iOS 13.5
iPhone 12 Pro Max
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 13:51