質問編集履歴

3

誤り修正

2019/12/07 16:27

投稿

hameji
hameji

スコア1380

test CHANGED
File without changes
test CHANGED
@@ -198,36 +198,38 @@
198
198
 
199
199
  }
200
200
 
201
+
202
+
203
+ // collectionCellのtextFieldなどにdelegateを設定し、
204
+
205
+ // returnする場合にrowを数値で指定せずに、cellPresenterのself.cellsの
206
+
207
+ // enumからindexを取得し、更新に利用したいです。
208
+
209
+ func artistTextFieldDidReturn(text: String) {
210
+
211
+ let row = returnRow2(cell: .artist) // コレが働くようにしたい
212
+
213
+ let cellType = self.cells[row]
214
+
215
+ switch cellType {
216
+
217
+ case .titleCell(let data):
218
+
219
+ self.cells[row] = .titleCell(text)
220
+
221
+ default: break
222
+
223
+ }
224
+
225
+ self.collectionView.reloadItems(at: [[0, row]])
226
+
227
+ }
228
+
201
229
  }
202
230
 
203
231
 
204
232
 
205
- // collectionCellのtextFieldなどにdelegateを設定し、
206
-
207
- // returnする場合にrowを数値で指定せずに、cellPresenterのself.cellsの
208
-
209
- // enumからindexを取得し、更新に利用したいです。
210
-
211
- func artistTextFieldDidReturn(text: String) {
212
-
213
- let row = returnRow2(cell: .artist) // コレが働くようにしたい
214
-
215
- let cellType = self.cells[row]
216
-
217
- switch cellType {
218
-
219
- case .titleCell(let data):
220
-
221
- self.cells[row] = .titleCell(text)
222
-
223
- default: break
224
-
225
- }
226
-
227
- self.collectionView.reloadItems(at: [[0, row]])
228
-
229
- }
230
-
231
233
  ```
232
234
 
233
235
 

2

コード修正

2019/12/07 16:27

投稿

hameji
hameji

スコア1380

test CHANGED
File without changes
test CHANGED
@@ -32,13 +32,13 @@
32
32
 
33
33
  // CDCellのEnum
34
34
 
35
- enum CDCellPresenter {
35
+ enum CDPresentCell {
36
-
36
+
37
- case titleCell(String)
37
+ case titleCell(String?)
38
-
38
+
39
- case artistCell(String)
39
+ case artistCell(String?)
40
-
40
+
41
- case releaseCell(Date)
41
+ case releaseCell(Date?)
42
42
 
43
43
  }
44
44
 
@@ -50,21 +50,23 @@
50
50
 
51
51
 
52
52
 
53
- class CDViewController: UIViewController {
53
+ class CDViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
54
54
 
55
55
  @IBOutlet weak var collectionView: UICollectionView!
56
56
 
57
+ @IBOutlet weak var datePicker: UIDatePicker!
58
+
57
- var cells:[CDCellPresenter]
59
+ var cells:[CDPresentCell]
58
60
 
59
61
 
60
62
 
61
63
  init() {
62
64
 
63
- self.cells = [.titleCell("光の気配"),
65
+ self.cells = [.titleCell(nil),
64
-
66
+
65
- .artistCell("KinKi Kids"),
67
+ .artistCell(nil),
66
-
68
+
67
- .releaseCell(Date())
69
+ .releaseCell(nil)
68
70
 
69
71
  ]
70
72
 
@@ -72,12 +74,80 @@
72
74
 
73
75
 
74
76
 
77
+ // 試した1個目 <- CDPresentCell と CDPresentCellが一致しないというエラーが出ました。
78
+
79
+ private fun returnRow1(cell: CDPresentCell) -> Int? {
80
+
81
+ var m: Int? = nil
82
+
83
+ for n in 0 ..< self.cells.count {
84
+
85
+ if cell == self.cells[n] {
86
+
87
+ m = n
88
+
89
+ }
90
+
91
+ }
92
+
93
+ return m
94
+
95
+ }
96
+
97
+
98
+
99
+ // コレ試した2個目 <- CDPresentCell と CDPresentCellが一致しないというエラーが出ました。
100
+
101
+ private func returnRow2(cell: CDPresentCell) -> Int? {
102
+
103
+ if let index = self.cells.firstIndex(where: { if case cell.self = $0 { return true }; return false }) {
104
+
105
+ return index
106
+
107
+ }
108
+
109
+ return nil
110
+
111
+ }
112
+
113
+
114
+
75
115
  override func viewDidLoad() {
76
116
 
77
117
  }
78
118
 
79
119
 
80
120
 
121
+ @IBAction func doneButtonPressed(_ sender: Any) {
122
+
123
+ if let row = self.collectionView.indexPathsForSelectedItems?.first?.row {
124
+
125
+ let cellType = self.cells[row]
126
+
127
+ switch cellType {
128
+
129
+ case .releaseCell(let data):
130
+
131
+ self.datePicker.alpha = 1.0
132
+
133
+ default: break
134
+
135
+ }
136
+
137
+ }
138
+
139
+ }
140
+
141
+
142
+
143
+ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
144
+
145
+ return self.cells.count
146
+
147
+ }
148
+
149
+
150
+
81
151
  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
82
152
 
83
153
  let cellType = self.cells[indexPath.row]
@@ -100,16 +170,64 @@
100
170
 
101
171
  return cell
102
172
 
103
- case .artistCell(let data):
173
+ case .releaseCell(let data):
104
-
174
+
105
- let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "artist", for: indexPath) as! ArtistCell
175
+ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "release", for: indexPath) as! ReleaseCell
106
176
 
107
177
  cell.bind(data: data)
108
178
 
109
179
  return cell
110
180
 
181
+ }
182
+
183
+
184
+
185
+ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
186
+
187
+ let cellType = self.cells[row]
188
+
189
+ switch cellType {
190
+
191
+ case .releaseCell(let data):
192
+
193
+ self.datePicker.alpha = 1.0
194
+
195
+ default: break
196
+
197
+ }
198
+
199
+ }
200
+
111
201
  }
112
202
 
203
+
204
+
205
+ // collectionCellのtextFieldなどにdelegateを設定し、
206
+
207
+ // returnする場合にrowを数値で指定せずに、cellPresenterのself.cellsの
208
+
209
+ // enumからindexを取得し、更新に利用したいです。
210
+
211
+ func artistTextFieldDidReturn(text: String) {
212
+
213
+ let row = returnRow2(cell: .artist) // コレが働くようにしたい
214
+
215
+ let cellType = self.cells[row]
216
+
217
+ switch cellType {
218
+
219
+ case .titleCell(let data):
220
+
221
+ self.cells[row] = .titleCell(text)
222
+
223
+ default: break
224
+
225
+ }
226
+
227
+ self.collectionView.reloadItems(at: [[0, row]])
228
+
229
+ }
230
+
113
231
  ```
114
232
 
115
233
 

1

画像追加

2019/12/07 16:25

投稿

hameji
hameji

スコア1380

test CHANGED
File without changes
test CHANGED
@@ -108,12 +108,10 @@
108
108
 
109
109
  return cell
110
110
 
111
+ }
112
+
113
+ ```
111
114
 
112
115
 
113
116
 
114
-
115
-
116
-
117
-
118
-
119
- ```
117
+ ![イメージ説明](8dd64db9d9c36ed73978eb2d18d34b5b.png)