teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

セルデータの扱いについて追記

2020/04/06 00:41

投稿

TsukubaDepot
TsukubaDepot

スコア5086

answer CHANGED
@@ -25,4 +25,54 @@
25
25
  ```
26
26
  適切な場所で保存し、適切な場所で読み出せばいいかと思います。
27
27
 
28
- 上記のサンプルはPlaygroundでも動くので、まずは簡単なサンプルを作り動かしてみることで動作を確認されてはいかがでしょうか。
28
+ 上記のサンプルはPlaygroundでも動くので、まずは簡単なサンプルを作り動かしてみることで動作を確認されてはいかがでしょうか。
29
+
30
+ --
31
+
32
+ ToDo のデータを保存したいということであれば、Cell に保存するというか、1件のToDoに対応するクラスを作り、それを配列にして扱った方が簡単です。
33
+
34
+ たとえば、
35
+ ```Swift
36
+ class Todo {
37
+ var title: String
38
+ var todoDescription: String
39
+
40
+ init(title: String, description: String = "") {
41
+ self.title = title
42
+ self.todoDescription = description
43
+ }
44
+ }
45
+ ```
46
+ のような感じでクラスを作り、適切なところで
47
+ ```Swift
48
+ var todoArray: [Todo] = []
49
+ ````
50
+ といった感じでTodoクラスの配列を作り、
51
+ ```Swift
52
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
53
+ // 主要なところのみ掲載
54
+ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
55
+ cell.textLabel?.text = todoArray[indexPath.row].title
56
+ return cell
57
+ }
58
+ ```
59
+ でテーブルセルに表示させたり、
60
+ ```Swift
61
+ func textFieldShouldReturn(_ textField: UITextField) -> Bool {
62
+ let text = textField.text ?? ""
63
+ todoArray.append(Todo(title: text))
64
+
65
+ tableView.reloadData()
66
+ // その他必要な処理
67
+ return true
68
+
69
+ }
70
+ ```
71
+ で新規データを追加すればいいと思います。
72
+
73
+ 同じような感じで、Todoの詳細(`Todo.todoDescription`)は遷移先でセットすればいいのではないでしょうか。
74
+
75
+ ちなみに、カスタムクラス(正確にはプロパティリスト)以外のクラスをUserDefaultsに保存するためには、さらにひと工夫必要です。
76
+
77
+ これについては過去の回答の後半に例がありますので、そちらも参考にしてみてください。
78
+ - [[teratail:250323] [swift 5]textViewで変えた色を違う画面のlabelに反映させたい](https://teratail.com/questions/250323)