前提・実現したいこと
Xcodeにてアプリをつくっており、今は設定画面を作成しております。
以下のコードでtableviewのcellを選択した際にチェックマークを入れることは可能になったのですが
他のViewControllerなどに画面遷移をしてまた戻ってくるとチェックマークが消えてしまいます。
どのようなやり方でチェックマークを維持することができますか?
また特定のセルにチェックマークをつけるにはどうすればいいのでしょうか
tableViewControllerでDynamic Prototypeを使用しており遷移はNavigationContorollerで行なっています。
ご回答よろしくお願いいたします
発生している問題・エラーメッセージ
なし
該当のソースコード
コード
Swift
1 2import UIKit 3 4var selectSetting: String = "" 5 6class SoundSelectTableViewController: UITableViewController { 7 var soundArray = ["alerm1","alerm2","alerm3","alerm4"] 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 tableView.allowsMultipleSelection = false 11 UserDefaults.standard.set(selectSetting, forKey: "selectSettingKey") 12 13 14 // Uncomment the following line to preserve selection between presentations 15 // self.clearsSelectionOnViewWillAppear = false 16 17 // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 18 // self.navigationItem.rightBarButtonItem = self.editButtonItem 19 } 20 21 override func didReceiveMemoryWarning() { 22 super.didReceiveMemoryWarning() 23 // Dispose of any resources that can be recreated. 24 } 25 26 // MARK: - Table view data source 27 28 override func numberOfSections(in tableView: UITableView) -> Int { 29 // #warning Incomplete implementation, return the number of sections 30 return 1 31 } 32 33 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 34 // #warning Incomplete implementation, return the number of rows 35 return soundArray.count 36 } 37 38 39 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 40 let cell = tableView.dequeueReusableCell(withIdentifier: "soundSelectCell", for: indexPath) 41 cell.textLabel?.text = soundArray[indexPath.row] 42 // Configure the cell... 43 // cell.accessoryType = .checkmark 44 cell.selectionStyle = UITableViewCellSelectionStyle.none 45 return cell 46 } 47 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 48 let cell = tableView.cellForRow(at:indexPath) 49 // チェックマークを入れる 50 cell?.accessoryType = .checkmark 51 selectSetting = soundArray[indexPath.row] 52 53 } 54 override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 55 let cell = tableView.cellForRow(at:indexPath) 56 57 // チェックマークを外す 58 cell?.accessoryType = .none 59 } 60 61 /* 62 // Override to support conditional editing of the table view. 63 override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 64 // Return false if you do not want the specified item to be editable. 65 return true 66 } 67 */ 68 69 /* 70 // Override to support editing the table view. 71 override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 72 if editingStyle == .delete { 73 // Delete the row from the data source 74 tableView.deleteRows(at: [indexPath], with: .fade) 75 } else if editingStyle == .insert { 76 // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 77 } 78 } 79 */ 80 81 /* 82 // Override to support rearranging the table view. 83 override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { 84 85 } 86 */ 87 88 /* 89 // Override to support conditional rearranging of the table view. 90 override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { 91 // Return false if you do not want the item to be re-orderable. 92 return true 93 } 94 */ 95 96 /* 97 // MARK: - Navigation 98 99 // In a storyboard-based application, you will often want to do a little preparation before navigation 100 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 101 // Get the new view controller using segue.destinationViewController. 102 // Pass the selected object to the new view controller. 103 } 104 */
回答3件
あなたの回答
tips
プレビュー