質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

532閲覧

遷移先のCollectionViewにUIImageを一覧表示したいが、落ちてしまう

YokoGuddy

総合スコア5

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/01/15 10:43

編集2020/01/15 10:49

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
ボタンで遷移した先のViewController上にあるCollectionViewにて
Assetsフォルダ内の画像(UIImage)を一覧表示したいのですが、
ビルドはできるのですが、ボタンを押すと落ちてしまいます。

発生している問題・エラーメッセージ

Could not cast value of type 'UIView' (0x7fff898df878) to 'UIImageView' (0x7fff898df490).

該当のソースコード

swift

1 2 import UIKit 3 4 class FaceItemViewController: UIViewController,UICollectionViewDataSource,UICollectionViewDelegate{ 5 6 private let faces = ["face0", "face1", "face2", "face3", "face4", "face5","face6", "face7", "face8", "face9", "face10", "face11","face12", "face13", "face14"] 7 8 @IBOutlet weak var collectionView: UICollectionView! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 // レイアウトを調整 14 let layout = UICollectionViewFlowLayout() 15 layout.sectionInset = UIEdgeInsets(top: 15, left: 15, bottom: 15, right: 15) 16 collectionView.collectionViewLayout = layout 17 18 19 } 20 21 22 //セルの表示数 23 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 24 return faces.count; 25 } 26 27 // セル(要素)に表示する内容 28 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 29 30 let cell : UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier:"FaceCell",for: indexPath ) 31 32 //Tag番号を使ってインスタンスをつくる 33 let imageView = cell.contentView.viewWithTag(1) as! UIImageView 34 //画像配列の番号で指定された要素の名前の画像をUIimageとする 35 let cellImage = UIImage(named: faces[indexPath.row]) 36 //UIimageをUIimageViewのimageとして設定 37 imageView.image = cellImage 38 39 cell.backgroundColor = .white 40 41 return cell 42 43 } 44 45 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 46 let horizontalSpace : CGFloat = 20 47 let cellSize : CGFloat = self.view.bounds.width / 3 - horizontalSpace 48 return CGSize(width: cellSize, height: cellSize) 49 } 50 51 52 } 53 } 54 55 56

試したこと

インスタンスは作らず、一枚の画像を連続(複数)表示することはできました。
ストーリーボード上で、遷移先のviewのcustumclassをUIViewに設定して
みましたがダメでした。

ご教示いただければ幸いです。どうぞよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

Xcode11.3

ここにより詳細な情報を記載してください。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dsuzuki

2020/01/15 11:54

落ちるのはソースコード上のどこですか? let imageView = cell.contentView.viewWithTag(1) as! UIImageViewなら、 cell.contentView.viewWithTag(1)の戻り値がUIImageView以外のUIViewになっていませんか?
YokoGuddy

2020/01/15 13:44

誠にありがとうございます!落ちるのはおっしゃる通り、let imageView = cell.contentView.viewWithTag(1) as! UIImageViewです。 cell.contentView.viewWithTag(1)の戻り値がUIImageView以外のUIView、というのはどういうことでしょうか。。。このあたりが私もあやふやできてしまっていまして、わかっていない感じがします。お手数ですが、ご教示いただければ幸いです。
dsuzuki

2020/01/16 02:33

UIImageView ではない UIView を UIImageView へキャストしようとしているからエラーが発生しています。 viewWithTag(_) は、 引数で指定したタグ番号を持つ UIView を返します。 このUIViewの実体は、UIImageViewだったり、UIButtonやUILabelかもしれません。(UIViewを継承しているクラスなら、UIViewとみなして返されます。) UIImageViewのタグ番号だけが 1 なら、UIViewの型で UIImageView が返されるので、UIImageViewへのキャストができます。 そうでなければ、例えば、UILabelが返されていたら、UIImageViewへのキャストはできないので、エラーになります。 なので、 dump( cell.contentView.viewWithTag(1) ) 等の処理で、実際に何が返されているのかを確認してください。
YokoGuddy

2020/01/16 04:23

丁寧な解説誠にありがとうございます!大変勉強になりました。ありがとうございます。
guest

回答1

0

ベストアンサー

//Tag番号を使ってインスタンスをつくる let imageView = cell.contentView.viewWithTag(1) as! UIImageView

もしここでエラーが出ているのなら、ストーリーボードのcontentViewtag1になっていると思います。

ストーリーボードで、contentViewtag0にして、face0tag1にすれば、動作すると思います。

投稿2020/01/16 02:33

eytyet

総合スコア803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問