### tableviewcellをスワイプして削除したい。遷移先のデータも削除したい。
調べたコードを入れるとスワイプの状態にはなりますがdeleteボタンを押すとクラッシュします。
一番下のコードが追加したコードです。
また、cellの情報を削除するとセルの遷移先の情報も削除されるのかを教えていただけると嬉しいです。
・・追加
追加したコードは問題ではなさそうでした。
他のコードに問題があるのですね。
どこに問題があるか教えていただけると嬉しいです。
よろしくお願いいたします。
・・・追加
現在、このようなコードになっております。
よろしくお願いいたします。
swift
1import UIKit 2private let unselectedRow = -1 3 4class MemoViewController: UIViewController,UITableViewDataSource, UITextFieldDelegate,UITableViewDelegate { 5 6 7 8 @IBOutlet weak var editMemoField: UITextField! 9 10 @IBOutlet weak var memoListView: UITableView! 11 12 13 let userDefaults = UserDefaults.standard 14 15 16 var memoList: [String] = [] 17 var editRow: Int = unselectedRow 18 var giveData: String = "" 19 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 memoListView.delegate = self 25 memoListView.dataSource = self 26 memoListView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") 27 editMemoField.becomeFirstResponder() 28 editMemoField.keyboardType = UIKeyboardType.emailAddress 29 30 31 32 if let aaa = userDefaults.object(forKey: "memoList") { 33 memoList = aaa as! Array<String> 34 } 35 } 36 37 38 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 39 memoList.append(textField.text!) 40 userDefaults.set(memoList, forKey: "memoList") 41 userDefaults.synchronize() 42 43 memoList = userDefaults.object(forKey: "memoList") as! Array<String> 44 45 46 47 self.memoListView.reloadData() //データをリロードする 48 textField.resignFirstResponder() 49 return true 50 51 } 52 53 override func didReceiveMemoryWarning() { 54 super.didReceiveMemoryWarning() 55 // Dispose of any resources that can be recreated. 56 } 57 58 59 60 61 62 @IBAction func tapSubmitButton(_ sender: Any) { 63 64 applyMemo() 65 66 } 67 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 68 69 return 12 70 } 71 72 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 73 74 75 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) 76 77 78 if indexPath.row >= memoList.count { 79 return cell 80 } 81 82 cell.textLabel?.text = memoList[indexPath.row] 83 84 return cell 85 86 } 87 88 89 90 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 91 92 93 94 95 if indexPath.row >= memoList.count { 96 97 return 98 } 99 100 101 editRow = indexPath.row 102 editMemoField.text = memoList[editRow] 103 giveData = memoList[indexPath.item] 104 if indexPath.row == 0 { 105 106 performSegue(withIdentifier: "toCell0", sender: nil) 107 108 109 110 }else if indexPath.row == 1 { 111 112 performSegue(withIdentifier: "toCell1", sender: nil) 113 114 115 116 ]・・・・・・ 117 118 119 } 120 121 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 122 123 if segue.identifier == "toCell0" { 124 125 let vc = segue.destination as! Cell0ViewController 126 vc.receiveData = giveData 127 128 ・・・・・・ 129 } 130 131 132 133 } 134 135 136 137 private func textFieldShouldReturn(textField: UITextField) -> Bool { 138 applyMemo() 139 return true 140 } 141 142 143 144 func applyMemo() { 145 if editMemoField.text == nil { 146 return 147 } 148 149 if editRow == unselectedRow { 150 memoList.append(editMemoField.text!) 151 152 } else { 153 memoList[editRow] = editMemoField.text! 154 userDefaults.set(memoList, forKey: "memoList") 155 userDefaults.synchronize() 156 157 memoList = userDefaults.object(forKey: "memoList") as! Array<String> 158 159 } 160 editMemoField.text = "" 161 editRow = unselectedRow 162 163 memoListView.reloadData() 164 165 166 } 167 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 168 169 if editingStyle == UITableViewCell.EditingStyle.delete{ 170 memoList.remove(at: indexPath.row) 171 tableView.deleteRows(at : [indexPath], with: .automatic) 172 } 173 } 174 175 176 177 178} 179 180
回答2件
あなたの回答
tips
プレビュー