回答編集履歴

4

最終的な回答に修正します

2018/04/10 03:58

投稿

516k
516k

スコア189

test CHANGED
@@ -1,10 +1,20 @@
1
- CollectionViewのDelegateを使わない実装であ
1
+ ControllerがDelegateに適合していないように見受けらます。
2
+
3
+ ```swift
4
+
5
+ class ViewController:UIViewController,UICollectionViewDataSource,UICollectionViewDelegate
2
6
 
3
7
 
4
8
 
5
- 下記のコードは不要で
9
+ ```
10
+
11
+ にてデリゲートを設定することで、セルタップ時のデリゲートメソッドが呼び出されるようになります。
6
12
 
7
13
 
14
+
15
+ CollectionViewのDelegateを使わない実装であれば
16
+
17
+ 下記のコードは不要で
8
18
 
9
19
    ```swift
10
20
 
@@ -38,7 +48,7 @@
38
48
 
39
49
  ```
40
50
 
41
-
51
+ アウトレットにてcollectionViewを参照し、
42
52
 
43
53
  PrepareForSegueの中で選択された画像の取り出しを完結させれば動くような気がします。
44
54
 

3

不要なprint文を削除しました

2018/04/10 03:58

投稿

516k
516k

スコア189

test CHANGED
@@ -48,8 +48,6 @@
48
48
 
49
49
  override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
50
50
 
51
- print(collectionView?.indexPathsForSelectedItems?.first?.item)
52
-
53
51
  if segue.identifier == "toDetailViewController",
54
52
 
55
53
  let subVC = segue.destination as? DetailViewController,

2

回答の方針を変更しました

2018/04/10 02:14

投稿

516k
516k

スコア189

test CHANGED
@@ -1,40 +1,36 @@
1
- ```swift
2
-
3
- override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
4
-
5
- if (segue.identifier == "toDetailViewController") {
6
-
7
- let subVC: DetailViewController = (segue.destination as? DetailViewController)!
8
-
9
- // SubViewController のselectedImgに選択された画像を設定する
10
-
11
- subVC.testImage = selectedImage
1
+ CollectionViewのDelegateを使わない実装であれば
12
-
13
- }
14
-
15
- }
16
2
 
17
3
 
18
4
 
19
- ```
5
+ 下記のコードは不要で
20
6
 
21
- 内のsubVC.testImage = selectedImageは実行されていますでしょうか。
22
7
 
23
- ブレークポイントを打つか、前後に適当なプリント文を入れれば確認できます。
24
8
 
25
- ```swift
9
+   ```swift
26
10
 
27
- override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
11
+ var selectedImage: UIImage?
28
12
 
29
- if (segue.identifier == "toDetailViewController") {
30
13
 
31
- let subVC: DetailViewController = (segue.destination as? DetailViewController)!
32
14
 
33
- // SubViewController のselectedImgに選択された画像を設定する
15
+ func collectionView(_ collectionView: UICollectionView,
34
16
 
35
- print("ok")
17
+ didSelectItemAt indexPath: IndexPath) {
36
18
 
19
+
20
+
21
+
22
+
23
+ let columnIndex = indexPath.row
24
+
25
+ let imageName = "image" + String(columnIndex + 1)
26
+
37
- subVC.testImage = selectedImage
27
+ selectedImage = UIImage(named:imageName)
28
+
29
+ if selectedImage != nil {
30
+
31
+ // SubViewController へ遷移するために Segue を呼び出す
32
+
33
+ performSegue(withIdentifier: "toDetailViewController",sender: nil)
38
34
 
39
35
  }
40
36
 
@@ -42,28 +38,30 @@
42
38
 
43
39
  ```
44
40
 
45
- 画面遷移(segue)の種類は何でしょうか?
41
+
46
42
 
47
-
43
+ PrepareForSegueの中で選択された画像の取り出しを完結させれば動くような気がします。
48
44
 
49
45
  ```swift
50
46
 
51
- override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
47
+ // Segue 準備
52
48
 
53
- if (segue.identifier == "toDetailViewController") {
49
+ override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
54
50
 
55
- let subVC: DetailViewController = segue.destination as! DetailViewController
51
+ print(collectionView?.indexPathsForSelectedItems?.first?.item)
56
52
 
57
- // SubViewController のselectedImgに選択された画像を設定する
53
+ if segue.identifier == "toDetailViewController",
58
54
 
59
- print("ok")
55
+ let subVC = segue.destination as? DetailViewController,
60
56
 
57
+ let indexPath = collectionView?.indexPathsForSelectedItems?.first,
58
+
59
+ let image = UIImage(named: "image" + String(indexPath.item + 1)) {
60
+
61
- subVC.testImage = selectedImage
61
+ subVC.testImage = image
62
62
 
63
63
  }
64
64
 
65
65
  }
66
66
 
67
67
  ```
68
-
69
- もしこのコードでクラッシュが発生するなら、segueのdestinationがDetailViewControllerではなく、おそらくはUINavigationControllerの可能性があります。

1

補足しました

2018/04/10 02:06

投稿

516k
516k

スコア189

test CHANGED
@@ -42,4 +42,28 @@
42
42
 
43
43
  ```
44
44
 
45
- あと画面遷移(segue)の種類は何でしょうか?
45
+ 画面遷移(segue)の種類は何でしょうか?
46
+
47
+
48
+
49
+ ```swift
50
+
51
+ override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
52
+
53
+ if (segue.identifier == "toDetailViewController") {
54
+
55
+ let subVC: DetailViewController = segue.destination as! DetailViewController
56
+
57
+ // SubViewController のselectedImgに選択された画像を設定する
58
+
59
+ print("ok")
60
+
61
+ subVC.testImage = selectedImage
62
+
63
+ }
64
+
65
+ }
66
+
67
+ ```
68
+
69
+ もしこのコードでクラッシュが発生するなら、segueのdestinationがDetailViewControllerではなく、おそらくはUINavigationControllerの可能性があります。