質問編集履歴

2

現在の追加コード

2018/06/04 13:57

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -241,3 +241,95 @@
241
241
 
242
242
 
243
243
  よろしくお願い致します。
244
+
245
+
246
+
247
+
248
+
249
+ ### 追加コード
250
+
251
+
252
+
253
+ ```
254
+
255
+
256
+
257
+ override func viewWillDisappear(_ animated: Bool) {
258
+
259
+ let postData = photoInformation!
260
+
261
+
262
+
263
+ if let uid = Auth.auth().currentUser?.uid {
264
+
265
+ if buttonStatus != true {
266
+
267
+ print("DEBUG_PRINT: buttonStatusがtrueじゃなかったら")
268
+
269
+ // 変数indexにすでにいいねをしていた場合に-1をするために-1を初期化の時点で格納する
270
+
271
+ var index = -1
272
+
273
+ // for文でloopさせながらpostDataのlikesの中の値を取り出す
274
+
275
+ for likeID in postData.likes {
276
+
277
+ if likeID == uid {
278
+
279
+ print("DEBUG_PRINT: もし配列の中に自身のuidが存在していたら削除する")
280
+
281
+ index = postData.likes.index(of: likeID)!
282
+
283
+ postData.likes.remove(at: index)
284
+
285
+ break
286
+
287
+ } else {
288
+
289
+ print("DEBUG_PRINT: 配列の中に自身のuidが存在していなかったので何もしない") // ここの処理がうまくいかない
290
+
291
+ }
292
+
293
+ }
294
+
295
+
296
+
297
+ } else {
298
+
299
+ print("DEBUG_PRINT: buttonStatusがtrueだったら")
300
+
301
+ for likeID in postData.likes {
302
+
303
+ if likeID == uid {
304
+
305
+ print("DEBUG_PRINT: もしも既に配列の中にuidが存在していたら")
306
+
307
+ return
308
+
309
+ } else {
310
+
311
+ print("DEBUG_PRINT: 配列の中に自身のuidが存在しないので配列に追加する")
312
+
313
+ postData.likes.append(uid)
314
+
315
+ }
316
+
317
+ }
318
+
319
+ }
320
+
321
+ // 増えたlikesをFirebaseに保存する
322
+
323
+ // childメソッドでConst.PostPathを指定して、childメソッドで投稿情報のidを指定する
324
+
325
+ let postRef = Database.database().reference().child(Const.PostPath).child(postData.id!)
326
+
327
+ let likes = ["likes": postData.likes]
328
+
329
+ postRef.updateChildValues(likes)
330
+
331
+ }
332
+
333
+ }
334
+
335
+ ```

1

コードの記入

2018/06/04 13:57

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,212 @@
14
14
 
15
15
 
16
16
 
17
+ ### コード
18
+
19
+
20
+
21
+ ``` swift
22
+
23
+
24
+
25
+ import UIKit
26
+
27
+ import Firebase
28
+
29
+ import FirebaseAuth
30
+
31
+ import FirebaseDatabase
32
+
33
+
34
+
35
+ class SharePhotoUpViewController: UIViewController {
36
+
37
+
38
+
39
+ @IBOutlet weak var profielNameLabel: UILabel!
40
+
41
+ @IBOutlet weak var imageView: UIImageView!
42
+
43
+ @IBOutlet weak var fightButton: UIButton!
44
+
45
+ @IBOutlet weak var commentButton: UIButton!
46
+
47
+ @IBOutlet weak var dateLabel: UILabel!
48
+
49
+ @IBOutlet weak var moreCountLabel: UILabel!
50
+
51
+ @IBOutlet weak var captionTextView: UITextView!
52
+
53
+ // 変数photoInformationに前の画面でUICollectionViewでタップされた画像の情報を取得する
54
+
55
+ var photoInformation: PostData!
56
+
57
+ let formatter = DateFormatter()
58
+
59
+ var label = UILabel()
60
+
61
+
62
+
63
+
64
+
65
+ override func viewDidLoad() {
66
+
67
+ super.viewDidLoad()
68
+
69
+
70
+
71
+ label.font = UIFont.systemFont(ofSize: 20)
72
+
73
+ label.text = photoInformation?.name
74
+
75
+
76
+
77
+ imageView.image = photoInformation.image
78
+
79
+ profielNameLabel.text = photoInformation?.name
80
+
81
+ formatter.dateFormat = "yyyy/MM/dd HH:mm"
82
+
83
+ let dateString = formatter.string(from: photoInformation.date!)
84
+
85
+ dateLabel.text = dateString
86
+
87
+ captionTextView.text = "(label.text!) (photoInformation.caption!)"
88
+
89
+
90
+
91
+ if photoInformation.isLiked {
92
+
93
+ let buttonImage = UIImage(named: "FireWhite48.png")
94
+
95
+ self.fightButton.setImage(buttonImage, for: .normal)
96
+
97
+ } else {
98
+
99
+ let buttonImage = UIImage(named: "FireRed48.png")
100
+
101
+ self.fightButton.setImage(buttonImage, for: .normal)
102
+
103
+ }
104
+
105
+
106
+
107
+ // Do any additional setup after loading the view.
108
+
109
+ }
110
+
111
+
112
+
113
+ override func didReceiveMemoryWarning() {
114
+
115
+ super.didReceiveMemoryWarning()
116
+
117
+ // Dispose of any resources that can be recreated.
118
+
119
+ }
120
+
121
+
122
+
123
+ override func viewWillAppear(_ animated: Bool) {
124
+
125
+ self.reloadInputViews()
126
+
127
+ }
128
+
129
+
130
+
131
+
132
+
133
+ @IBAction func handleFightButton(_ sender: Any) {
134
+
135
+ print("DEBUG_PRINT: moreボタンがタップされました")
136
+
137
+ let postData = photoInformation!
138
+
139
+
140
+
141
+ // Firebaseに保存するデータの準備
142
+
143
+ if let uid = Auth.auth().currentUser?.uid {
144
+
145
+ if postData.isLiked { // isLikedには初期値でfalseが設定ずみ
146
+
147
+ // すでにfightをしていた場合はいいねを解除をするためにIDを削除する
148
+
149
+ // 変数indexにすでにいいねをしていた場合に-1をするために-1を初期化の時点で格納する
150
+
151
+ var index = -1
152
+
153
+ // for文でloopさせながらpostDataのlikesの中の値を取り出す
154
+
155
+ for likeID in postData.likes {
156
+
157
+ // もしlikesの中の値が格納されているlikeIDの中に現在ログインしているuidがあった場合
158
+
159
+ if likeID == uid {
160
+
161
+ index = postData.likes.index(of: likeID)!
162
+
163
+ break
164
+
165
+ }
166
+
167
+ }
168
+
169
+ postData.likes.remove(at: index)
170
+
171
+ } else {
172
+
173
+ // もしmoreをしていなかった場合、appendメソッドでlikesの配列の中に地震のuidを追加する
174
+
175
+ postData.likes.append(uid)
176
+
177
+ }
178
+
179
+ // 増えたlikesをFirebaseに保存する
180
+
181
+ // childメソッドでConst.PostPathを指定して、childメソッドで投稿情報のidを指定する
182
+
183
+ let postRef = Database.database().reference().child(Const.PostPath).child(postData.id!)
184
+
185
+ let likes = ["likes": postData.likes]
186
+
187
+ postRef.updateChildValues(likes)
188
+
189
+
190
+
191
+ }
192
+
193
+ }
194
+
195
+
196
+
197
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
198
+
199
+ // もしコメントボタンをタップした時はshareButtonSegueで画面遷移をする
200
+
201
+ if segue.identifier == "shareButtonSegue" {
202
+
203
+ let shareCommentViewController: ShareCommentViewController = segue.destination as! ShareCommentViewController
204
+
205
+ print("DEBUG_PRINT: handleCommentActionがタップされました")
206
+
207
+ // 画面遷移時に表示されているデータをshareCommentViewControllerの変数に格納する
208
+
209
+ shareCommentViewController.photoInformation = photoInformation
210
+
211
+ }
212
+
213
+ }
214
+
215
+
216
+
217
+ }
218
+
219
+
220
+
221
+ ```
222
+
17
223
 
18
224
 
19
225
  ### 試したこと