
※この記事は初心者の方や初めてアプリを作る人を対象にしています。
動作環境 Xcode Version 11.4 Swift version 5.2
今回はメモを編集してSaveボタンを押した時にメモが更新されるのではなく追加されてしまう問題を修正したいと思います。
今回編集するのはMemoTableViewController.swiftの「unwindToMemoListメソッド」です。
ちなみに「unwindToMemoListメソッド」はこちらの記事で登場済みです。
下記コードが「unwindToMemoListメソッド」の現状です。
@IBAction func unwindToMemoList(sender: UIStoryboardSegue) {
guard let sourceVC = sender.source as? MemoViewController,
let memo = sourceVC.memo else {
return
}
self.memos.append(memo)
self.tableView.reloadData()
}
これを編集していきましょう。
考え方としては、メモをタップして編集画面に遷移した状態はセルが選択されている状態です。
Saveボタンを押したらその状態のまま戻ってくるので、戻って来た時にセルが選択されている状態かどうかを調べてあげます。
もし、セルが選択されている状態なら編集画面からの戻りなので「メモの値を更新」
セルが選択されていない状態ならメモ追加画面からの戻りなので「メモを追加」
と言う処理をしてあげます。
@IBAction func unwindToMemoList(sender: UIStoryboardSegue) {
guard let sourceVC = sender.source as? MemoViewController,
let memo = sourceVC.memo else {
return
}
if let selectedIndexPath = self.tableView.indexPathForSelectedRow {
self.memos[selectedIndexPath.row] = memo
} else {
self.memos.append(memo)
}
self.tableView.reloadData()
}
今回追加部分は6行目〜12行目です。
まずセルが選択されているかどうか調べるには「self.tableView.indexPathForSelectedRow」がnilだったら「選択されていない」
nilじゃなかったら「選択されている」と言う形で取得できます。
なので6行目でオプショナルバインディングを使い、nilじゃなかったら「let selectedIndexPath」に代入しています。
nilじゃなかった場合、7行目で「配列memos」の「selectedIndexPath.row」番目の値を更新しています。
nilだった場合は今まで通り「配列memos」に値を追加しています。(9行目)
11行目でtableViewを更新してあげます。
やっとメモの編集機能が完成しました!
これでメモアプリとしての機能は完成しましたが、最後に一つ問題があります。
アプリを落とした時にメモが消えてしまいます。
次回はメモが保存されるように実装したいと思います。
コメントを残す