回答編集履歴
3
@Stateのイニシャライザにおける初期値の設定についてを追記しました。
test
CHANGED
@@ -144,3 +144,41 @@
|
|
144
144
|
[frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)](https://developer.apple.com/documentation/swiftui/view/frame(minwidth:idealwidth:maxwidth:minheight:idealheight:maxheight:alignment:))
|
145
145
|
|
146
146
|
|
147
|
+
### 追記3
|
148
|
+
|
149
|
+
解決済みですが、
|
150
|
+
コメントいただきましたので、
|
151
|
+
同じ内容を回答欄にも記載しておきますね。
|
152
|
+
|
153
|
+
> textEditorTextへの文字の代入(とそれに伴う保存)だけが
|
154
|
+
> いただいた様にしても
|
155
|
+
> 〜としても できません
|
156
|
+
|
157
|
+
textEditorTextは@Stateのプロパティラッパー型で定義していますよね。
|
158
|
+
これをinit(イニシャライザ)で、初期値を設定するのは、ちょっと特殊な書き方をする必要があるみたいです。
|
159
|
+
|
160
|
+
`self.textEditorText` のように参照するのではなく、
|
161
|
+
`_textEditorText` のように参照するみたいです。
|
162
|
+
プロパティ名の先頭に「_」をつけたものです。
|
163
|
+
|
164
|
+
そして設定する値は
|
165
|
+
`item.text ?? ""` ではなく、
|
166
|
+
`State(initialValue: item.text ?? "")` のようになります。
|
167
|
+
State構造体のイニシャライザを呼び出す形です。
|
168
|
+
[init(initialValue:)](https://developer.apple.com/documentation/swiftui/state/init(initialvalue:))
|
169
|
+
|
170
|
+
まとめると、
|
171
|
+
回答欄のコードにある通りですが、
|
172
|
+
次のようになります。
|
173
|
+
|
174
|
+
```swift
|
175
|
+
@State var textEditorText = ""
|
176
|
+
// 省略
|
177
|
+
init(item: Item) {
|
178
|
+
_textEditorText = State(initialValue: item.text ?? "")
|
179
|
+
}
|
180
|
+
```
|
181
|
+
|
182
|
+
*これに関する公式のドキュメントを見たことがないのですが、stackoverflowなどで見て、そういうものだと思っています。
|
183
|
+
https://stackoverflow.com/questions/58758370/how-could-i-initialize-the-state-variable-in-the-init-function-in-swiftui
|
184
|
+
|
2
セルの中身について追記しました。
test
CHANGED
@@ -114,8 +114,33 @@
|
|
114
114
|
}()
|
115
115
|
```
|
116
116
|
|
117
|
+
|
117
|
-
## 追記
|
118
|
+
### 追記
|
118
119
|
|
119
120
|
「戻るときの保存」のコメントを受けてコードを修正しました。
|
120
121
|
`// *** `のようなコメントが修正ポイントです。
|
121
122
|
|
123
|
+
|
124
|
+
### 追記2
|
125
|
+
|
126
|
+
コメントありがとうございます。
|
127
|
+
もう不要かもしれませんが追記です。
|
128
|
+
|
129
|
+
> 「セルの中身」はtextsのvalueです
|
130
|
+
|
131
|
+
すみませんでした。理解したかもしれません。
|
132
|
+
itemにはtextとtextsの2つのプロパティがあって、
|
133
|
+
ContentViewのリスト(セル)に表示するのはtextなのだと思っていました。
|
134
|
+
(textはどこから設定するのだろう?とも思いました・・)
|
135
|
+
ここにはitem.textsが表示されるべきなのですね。
|
136
|
+
|
137
|
+
セルに表示される部分は、NavigationLinkのlabel引数で指定していますので、
|
138
|
+
21行目の `Text(item.text ?? "")` は、
|
139
|
+
`Text(item.texts ?? "")` になるのかなと思います。
|
140
|
+
[init(destination:label:)](https://developer.apple.com/documentation/swiftui/navigationlink/init(destination:label:)-27n7s)
|
141
|
+
|
142
|
+
長い文字列などはそのまま表示されてしまうと思いますので、
|
143
|
+
.frameモディファイアで、maxHeight,alignmentなどを指定してあげると良いのかなと思います。
|
144
|
+
[frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)](https://developer.apple.com/documentation/swiftui/view/frame(minwidth:idealwidth:maxwidth:minheight:idealheight:maxheight:alignment:))
|
145
|
+
|
146
|
+
|
1
コードを修正しました。
test
CHANGED
@@ -56,6 +56,8 @@
|
|
56
56
|
|
57
57
|
struct AnotherView: View {
|
58
58
|
@Environment(\.managedObjectContext) private var viewContext
|
59
|
+
// *** 独自のBackボタン実装時に戻るためのプロパティを追加しました。
|
60
|
+
@Environment(\.dismiss) private var dismiss
|
59
61
|
@State var textEditorText = ""
|
60
62
|
// itemを受け取るように追加しました。
|
61
63
|
let item: Item
|
@@ -63,11 +65,19 @@
|
|
63
65
|
TextEditor(text: $textEditorText)
|
64
66
|
// 警告が出ていたためmaxWidth,maxHeightに変更しました。
|
65
67
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
68
|
+
// *** 独自のBackボタンを実装するため標準のBackボタンを非表示にしました。
|
69
|
+
.navigationBarBackButtonHidden(true)
|
66
70
|
.toolbar {
|
67
71
|
// 手元の環境だと.bottomBarではボタンが表示されなかったためナビゲーションバーに変更して確認しました。
|
68
72
|
ToolbarItem(placement: .bottomBar) {
|
69
73
|
Button(action: additem) {
|
70
74
|
Image(systemName: "heart")
|
75
|
+
}
|
76
|
+
}
|
77
|
+
// *** 独自のBackボタンを追加しました。
|
78
|
+
ToolbarItem(placement: .navigationBarLeading) {
|
79
|
+
Button(action: back) {
|
80
|
+
Text("Back")
|
71
81
|
}
|
72
82
|
}
|
73
83
|
}
|
@@ -77,7 +87,7 @@
|
|
77
87
|
_textEditorText = State(initialValue: item.texts ?? "")
|
78
88
|
self.item = item
|
79
89
|
}
|
80
|
-
func additem() {
|
90
|
+
private func additem() {
|
81
91
|
withAnimation {
|
82
92
|
// item.textsを変更して保存するように変更しました。
|
83
93
|
item.texts = textEditorText
|
@@ -89,6 +99,11 @@
|
|
89
99
|
}
|
90
100
|
}
|
91
101
|
}
|
102
|
+
// *** Backボタンのメソッドを追加しました。
|
103
|
+
private func back() {
|
104
|
+
additem()
|
105
|
+
dismiss()
|
106
|
+
}
|
92
107
|
}
|
93
108
|
|
94
109
|
private let itemFormatter: DateFormatter = {
|
@@ -99,3 +114,8 @@
|
|
99
114
|
}()
|
100
115
|
```
|
101
116
|
|
117
|
+
## 追記
|
118
|
+
|
119
|
+
「戻るときの保存」のコメントを受けてコードを修正しました。
|
120
|
+
`// *** `のようなコメントが修正ポイントです。
|
121
|
+
|