回答編集履歴

11

修正

2018/06/05 10:40

投稿

退会済みユーザー
test CHANGED
@@ -102,4 +102,6 @@
102
102
 
103
103
  で動きますか?
104
104
 
105
- viewWillDisappearの中の処理はいらないと思います。
105
+ ~~viewWillDisappearの中の処理はいらないと思います。~~
106
+
107
+ 違和感があるようでしたら、viewWillDisappearの中に処理を部分的に移してください。

10

誤字訂正

2018/06/05 10:40

投稿

退会済みユーザー
test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  if let uidIndex = postData.likes.index(of: uid) {
42
42
 
43
- // 「いいね」済配にuidが存在する場合、その順番(uidIndex)をもとにuidを削除する
43
+ // 「いいね」済配にuidが存在するので、その順番(uidIndex)をもとにuidを削除する
44
44
 
45
45
  postData.likes.remove(at: uidIndex)
46
46
 

9

修正

2018/06/05 01:38

投稿

退会済みユーザー
test CHANGED
@@ -1,103 +1,105 @@
1
- 「ボタンをタップしたユーザーの情報が格納される配列」というのは、選択された写真ごとにもっていると思うので、写真が選択されて、画面遷移した際に、配列に自のidがあるないをキーとして、下記のようにするはどうでしょうか?
1
+ 分かりづらったようので、書き直ます。
2
2
 
3
3
 
4
+
5
+ 使うのは普通のUIViewControllerでいいと思います。
6
+
7
+
8
+
9
+ postData.isLikedが各々のユーザー固有のものと仮定して。
10
+
11
+
12
+
13
+ 「いいね?」ボタンを押したときに、「いいね」を押したかどうかを記憶しておく仕組みがなかったので
14
+
15
+ それを足してあげれば、要望どおりになると思います。
4
16
 
5
17
 
6
18
 
7
19
  ```swift
8
20
 
9
- // 配列にIDが含まれているかの状態を格納する変数
21
+ @IBAction func handleFightButton(_ sender: Any) {
10
22
 
11
- var buttonStatus: Bool?
23
+ let postData = photoInformation!
12
24
 
13
25
 
14
26
 
15
- // 配列IDが含まれているかをチェックする関数
27
+ // Firebase保存するデータの準備
16
28
 
17
- func arrayContainsId(id: String, array:[String])-> Bool{
29
+ if let uid = Auth.auth().currentUser?.uid {
18
30
 
19
- if 配列にidが含まれる {
31
+
20
32
 
21
-       return true
33
+ // 「いいね」済の場合
22
34
 
23
- } else {
35
+ if postData.isLiked == true {
24
36
 
37
+ // 配列から該当IDを削除する
38
+
39
+ // uidがが格納されている場所(uidIndex)を特定する
40
+
41
+ if let uidIndex = postData.likes.index(of: uid) {
42
+
43
+ // 「いいね」済配にuidが存在する場合、その順番(uidIndex)をもとにuidを削除する
44
+
45
+ postData.likes.remove(at: uidIndex)
46
+
47
+ }
48
+
49
+ postData.isLiked = false // 「いいね」してない状態になったと記憶させる
50
+
51
+
52
+
53
+ // ボタンの見た目を変更する
54
+
55
+ let buttonImage = UIImage(named: "FireRed48.png")
56
+
57
+ self.fightButton.setImage(buttonImage, for: .normal)
58
+
59
+
60
+
61
+ // 「いいね」してない場合
62
+
25
- return false
63
+ } else {
64
+
65
+ postData.likes.append(uid) // 「いいね」済配列にuidを追加する
66
+
67
+ postData.isLiked = true // 「いいね」した状態になったと記憶させる
68
+
69
+
70
+
71
+        // ボタンの見た目を変更する
72
+
73
+ let buttonImage = UIImage(named: "FireWhite48.png")
74
+
75
+ self.fightButton.setImage(buttonImage, for: .normal)
76
+
77
+ }
78
+
79
+
80
+
81
+ // 増えたlikesをFirebaseに保存する
82
+
83
+ // childメソッドでConst.PostPathを指定して、childメソッドで投稿情報のidを指定する
84
+
85
+
86
+
87
+ let postRef = Database.database().reference().child(Const.PostPath).child(postData.id!)
88
+
89
+ let likes = ["likes": postData.likes]
90
+
91
+ /* ここで、postData.isLikedもfireBaseに保存する必要がある */
92
+
93
+ postRef.updateChildValues(likes)
94
+
95
+
26
96
 
27
97
  }
28
98
 
29
- }
99
+ }
30
-
31
-
32
100
 
33
101
  ```
34
102
 
35
- こんな感じのを用意しておいて、
103
+ で動きますか?
36
104
 
37
-
38
-
39
- ```swift
40
-
41
-
42
-
43
- override func viewDidLoad() {
44
-
45
-
46
-
47
- // ページが読み込まれたときに配列にUIDがあるかどうかを確認する
48
-
49
- buttonStatus = arrayContainsId(id: UID, array: IdArray)
50
-
51
- idあるなしによってボタン見た目を変えるら変更
105
+ viewWillDisappear中の処理はいらいと思いま
52
-
53
-
54
-
55
- }
56
-
57
-
58
-
59
-
60
-
61
- // いいねボタンタップ時の関数
62
-
63
- @IBAction func ILikeButtonTapped(_ sender: Any) {
64
-
65
- if buttonStatus == true{
66
-
67
- なにもしない and 「いいね済みだよ」と表示するとか
68
-
69
- いいねを取り消す→配列からUIDを取り除く
70
-
71
-     buttonStatus = arrayContainsId(id: UID, array: IdArray)
72
-
73
-     idあるなしによってボタンの見た目を変えるなら変更する
74
-
75
- } else {
76
-
77
- 配列にIDを追加する
78
-
79
-     buttonStatus = arrayContainsId(id: UID, array: IdArray)
80
-
81
-     idあるなしによってボタンの見た目を変えるなら変更する
82
-
83
- }
84
-
85
- }
86
-
87
- ```
88
-
89
- 構造体?でもっているデータの.likedがBoolで、.likesが配列かな?
90
-
91
-
92
-
93
- 変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
94
-
95
- UIの選択は、UIの機能には依存していないので、お好みでよいのでは?
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
- 要望に合わないようでしたらご容赦くださいませ。

8

修正

2018/06/05 01:23

投稿

退会済みユーザー
test CHANGED
@@ -86,10 +86,18 @@
86
86
 
87
87
  ```
88
88
 
89
+ 構造体?でもっているデータの.likedがBoolで、.likesが配列かな?
90
+
91
+
92
+
89
93
  変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
90
94
 
91
95
  UIの選択は、UIの機能には依存していないので、お好みでよいのでは?
92
96
 
93
97
 
94
98
 
99
+
100
+
101
+
102
+
95
103
  要望に合わないようでしたらご容赦くださいませ。

7

修正

2018/06/03 08:44

投稿

退会済みユーザー
test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
  変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
90
90
 
91
- UIの機能には依存していないので、お好みでよいのでは?
91
+ UIの選択は、UIの機能には依存していないので、お好みでよいのでは?
92
92
 
93
93
 
94
94
 

6

修正

2018/06/03 01:58

投稿

退会済みユーザー
test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  buttonStatus = arrayContainsId(id: UID, array: IdArray)
50
50
 
51
- ボタンの見た目を変えるなら変更する
51
+ idあるなしによってボタンの見た目を変えるなら変更する
52
52
 
53
53
 
54
54
 
@@ -70,7 +70,7 @@
70
70
 
71
71
      buttonStatus = arrayContainsId(id: UID, array: IdArray)
72
72
 
73
-     ボタンの見た目を変更しているなら変
73
+     idあるなしによってボタンの見た目を変るなら変更す
74
74
 
75
75
  } else {
76
76
 
@@ -78,7 +78,7 @@
78
78
 
79
79
      buttonStatus = arrayContainsId(id: UID, array: IdArray)
80
80
 
81
-     ボタンの見た目を変更しているなら変
81
+     idあるなしによってボタンの見た目を変るなら変更す
82
82
 
83
83
  }
84
84
 

5

誤字訂正

2018/06/03 01:57

投稿

退会済みユーザー
test CHANGED
@@ -92,4 +92,4 @@
92
92
 
93
93
 
94
94
 
95
- 要望に合わないようでしたご容赦くださいませ。
95
+ 要望に合わないようでしたご容赦くださいませ。

4

追加

2018/06/03 01:45

投稿

退会済みユーザー
test CHANGED
@@ -87,3 +87,9 @@
87
87
  ```
88
88
 
89
89
  変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
90
+
91
+ UIの機能には依存していないので、お好みでよいのでは?
92
+
93
+
94
+
95
+ 要望に合わないようでしたがご容赦くださいませ。

3

説明をなんちゃってコードに変更

2018/06/03 01:33

投稿

退会済みユーザー
test CHANGED
@@ -1,17 +1,89 @@
1
- 「ボタンをタップしたユーザーの情報が格納される配列」というのは、選択された写真ごとにもっていると思うので、写真が選択されて、画面遷移した際に、配列に自分のidがあるかないかをキーとして、下記のようにするきますか?
1
+ 「ボタンをタップしたユーザーの情報が格納される配列」というのは、選択された写真ごとにもっていると思うので、写真が選択されて、画面遷移した際に、配列に自分のidがあるかないかをキーとして、下記のようにするのはどうしょうか?
2
2
 
3
3
 
4
4
 
5
- ①「いいねする対象のページ」が表示された?読み込まれたら?、対象ページに対応する「idが格納されている配列」に自分のidが含まれているか検索、「いいねボタン」の設定を変更する。
6
5
 
7
-  ・自分のidがある→「いいねボタン」を押してもidをappendしなくするor使用不可にするorいいね取り消し機能として、配列からidを削除するようにする
8
6
 
9
-  ・自分のidがない→「いいねボタン」を押したらidをappendするよう設定する
7
+ ```swift
10
8
 
11
- ②「いいねボタン」押さたら、①で設定しるので、そのとおりにボタンの処理をする
9
+ // 配列にID含まれて状態格納する変数
12
10
 
13
- →①の処理を走らせ、idが配列に含まれているか調べて、「いいねボタン」の状態を更新する
11
+ var buttonStatus: Bool?
14
12
 
15
13
 
16
14
 
15
+ // 配列にIDが含まれているかをチェックする関数
16
+
17
+ func arrayContainsId(id: String, array:[String])-> Bool{
18
+
19
+ if 配列にidが含まれる {
20
+
21
+       return true
22
+
23
+ } else {
24
+
25
+ return false
26
+
27
+ }
28
+
29
+ }
30
+
31
+
32
+
33
+ ```
34
+
17
- んか見づらくごめんなさ
35
+ こん感じのを用意して、
36
+
37
+
38
+
39
+ ```swift
40
+
41
+
42
+
43
+ override func viewDidLoad() {
44
+
45
+
46
+
47
+ // ページが読み込まれたときに配列にUIDがあるかどうかを確認する
48
+
49
+ buttonStatus = arrayContainsId(id: UID, array: IdArray)
50
+
51
+ ボタンの見た目を変えるなら変更する
52
+
53
+
54
+
55
+ }
56
+
57
+
58
+
59
+
60
+
61
+ // いいねボタンタップ時の関数
62
+
63
+ @IBAction func ILikeButtonTapped(_ sender: Any) {
64
+
65
+ if buttonStatus == true{
66
+
67
+ なにもしない and 「いいね済みだよ」と表示するとか
68
+
69
+ いいねを取り消す→配列からUIDを取り除く
70
+
71
+     buttonStatus = arrayContainsId(id: UID, array: IdArray)
72
+
73
+     ボタンの見た目を変更しているなら変える
74
+
75
+ } else {
76
+
77
+ 配列にIDを追加する
78
+
79
+     buttonStatus = arrayContainsId(id: UID, array: IdArray)
80
+
81
+     ボタンの見た目を変更しているなら変える
82
+
83
+ }
84
+
85
+ }
86
+
87
+ ```
88
+
89
+ 変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。

2

修正

2018/06/03 01:26

投稿

退会済みユーザー
test CHANGED
@@ -1,15 +1,17 @@
1
- 「ボタンをタップしたユーザーの情報が格納される配列」というのは、選択された写真ごとにもっていると思うので
1
+ 「ボタンをタップしたユーザーの情報が格納される配列」というのは、選択された写真ごとにもっていると思うので、写真が選択されて、画面遷移した際に、配列に自分のidがあるかないかをキーとして、下記のようにするとできますか?
2
-
3
- 配列に自分のidがあるかないかをキーとして、下記のようにするとできますか?
4
2
 
5
3
 
6
4
 
7
5
  ①「いいねする対象のページ」が表示された?読み込まれたら?、対象ページに対応する「idが格納されている配列」に自分のidが含まれているか検索、「いいねボタン」の設定を変更する。
8
6
 
9
-   ・自分のidがある→「いいねボタン」を押してもidをappendしなくするor使用不可にする
7
+  ・自分のidがある→「いいねボタン」を押してもidをappendしなくするor使用不可にするorいいね取り消し機能として、配列からidを削除するようにする
10
8
 
11
-   ・自分のidがない→「いいねボタン」を押したらidをappendするよう設定する
9
+  ・自分のidがない→「いいねボタン」を押したらidをappendするよう設定する
12
10
 
13
11
  ②「いいねボタン」が押されたら、①で設定してあるので、そのとおりにボタンの処理をする。
14
12
 
15
13
  →①の処理を走らせ、idが配列に含まれているか調べて、「いいねボタン」の状態を更新する
14
+
15
+
16
+
17
+ なんか見づらくてごめんなさい。

1

修正

2018/06/03 00:50

投稿

退会済みユーザー
test CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
 
6
6
 
7
- ①「いいねする対象のページ」が表示された?読み込まれたら?、対象ページに対応する「idが格納されている配列」に自分のidが含まれているか検索
7
+ ①「いいねする対象のページ」が表示された?読み込まれたら?、対象ページに対応する「idが格納されている配列」に自分のidが含まれているか検索、「いいねボタン」の設定を変更する。
8
8
 
9
9
    ・自分のidがある→「いいねボタン」を押してもidをappendしなくするor使用不可にする
10
10
 
11
-   ・自分のidがない→「いいねボタン」を押したらidをappendする
11
+   ・自分のidがない→「いいねボタン」を押したらidをappendするよう設定する
12
12
 
13
- ②「いいねボタン」をおしたら、①で設定してあるので、そのとおりにボタンの処理をする。
13
+ ②「いいねボタン」が押されたら、①で設定してあるので、そのとおりにボタンの処理をする。
14
14
 
15
15
  →①の処理を走らせ、idが配列に含まれているか調べて、「いいねボタン」の状態を更新する