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

回答編集履歴

11

修正

2018/06/05 10:40

投稿

退会済みユーザー
answer CHANGED
@@ -50,4 +50,5 @@
50
50
  }
51
51
  ```
52
52
  で動きますか?
53
- viewWillDisappearの中の処理はいらないと思います。
53
+ ~~viewWillDisappearの中の処理はいらないと思います。~~
54
+ 違和感があるようでしたら、viewWillDisappearの中に処理を部分的に移してください。

10

誤字訂正

2018/06/05 10:40

投稿

退会済みユーザー
answer CHANGED
@@ -19,7 +19,7 @@
19
19
  // 配列から該当IDを削除する
20
20
  // uidがが格納されている場所(uidIndex)を特定する
21
21
  if let uidIndex = postData.likes.index(of: uid) {
22
- // 「いいね」済配にuidが存在する場合、その順番(uidIndex)をもとにuidを削除する
22
+ // 「いいね」済配にuidが存在するので、その順番(uidIndex)をもとにuidを削除する
23
23
  postData.likes.remove(at: uidIndex)
24
24
  }
25
25
  postData.isLiked = false // 「いいね」してない状態になったと記憶させる

9

修正

2018/06/05 01:38

投稿

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

8

修正

2018/06/05 01:23

投稿

退会済みユーザー
answer CHANGED
@@ -42,7 +42,11 @@
42
42
  }
43
43
  }
44
44
  ```
45
+ 構造体?でもっているデータの.likedがBoolで、.likesが配列かな?
46
+
45
47
  変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
46
48
  UIの選択は、UIの機能には依存していないので、お好みでよいのでは?
47
49
 
50
+
51
+
48
52
  要望に合わないようでしたらご容赦くださいませ。

7

修正

2018/06/03 08:44

投稿

退会済みユーザー
answer CHANGED
@@ -43,6 +43,6 @@
43
43
  }
44
44
  ```
45
45
  変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
46
- UIの機能には依存していないので、お好みでよいのでは?
46
+ UIの選択は、UIの機能には依存していないので、お好みでよいのでは?
47
47
 
48
48
  要望に合わないようでしたらご容赦くださいませ。

6

修正

2018/06/03 01:58

投稿

退会済みユーザー
answer CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  // ページが読み込まれたときに配列にUIDがあるかどうかを確認する
25
25
  buttonStatus = arrayContainsId(id: UID, array: IdArray)
26
- ボタンの見た目を変えるなら変更する
26
+ idあるなしによってボタンの見た目を変えるなら変更する
27
27
 
28
28
  }
29
29
 
@@ -34,11 +34,11 @@
34
34
  なにもしない and 「いいね済みだよ」と表示するとか
35
35
  いいねを取り消す→配列からUIDを取り除く
36
36
      buttonStatus = arrayContainsId(id: UID, array: IdArray)
37
-     ボタンの見た目を変更しているなら変
37
+     idあるなしによってボタンの見た目を変るなら変更す
38
38
  } else {
39
39
  配列にIDを追加する
40
40
      buttonStatus = arrayContainsId(id: UID, array: IdArray)
41
-     ボタンの見た目を変更しているなら変
41
+     idあるなしによってボタンの見た目を変るなら変更す
42
42
  }
43
43
  }
44
44
  ```

5

誤字訂正

2018/06/03 01:57

投稿

退会済みユーザー
answer CHANGED
@@ -45,4 +45,4 @@
45
45
  変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
46
46
  UIの機能には依存していないので、お好みでよいのでは?
47
47
 
48
- 要望に合わないようでしたご容赦くださいませ。
48
+ 要望に合わないようでしたご容赦くださいませ。

4

追加

2018/06/03 01:45

投稿

退会済みユーザー
answer CHANGED
@@ -42,4 +42,7 @@
42
42
  }
43
43
  }
44
44
  ```
45
- 変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
45
+ 変数をもつか、都度チェックするか、チェックのタイミングなどは、状況に合わせて変えてみてください。
46
+ UIの機能には依存していないので、お好みでよいのでは?
47
+
48
+ 要望に合わないようでしたがご容赦くださいませ。

3

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

2018/06/03 01:33

投稿

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

2

修正

2018/06/03 01:26

投稿

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

1

修正

2018/06/03 00:50

投稿

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