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

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

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

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

Swift

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

Q&A

解決済

1回答

3370閲覧

UICollectionViewでカスタムセルでレイアウトをxibファイルから使いたい

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/02/06 14:34

編集2017/02/06 14:38

UICollectionViewでセルごとに違ったレイアウトで表示しようとしております。
カスタムセルで.xibファイルを使おうとするとThread1でSIGABRTエラーがでます。

Main.storyboardでUICollectionViewを配置し、カスタムクラスを作成したカスタムクラスにしてます。
Main.storyboardでcollection view cellのreuse identifierは設定していません。コードで設定しています。
.xibのfile's ownerはカスタムセルクラスに設定しています。
xibで作成したUIImageView(mainImageという名前)とカスタムセルクラスは接続していますが、エラーでは

. . setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key mainImage.' .

と表示され接続ができてないようです。
どこかの設定が不十分なんでしょうか?

swift

1import UIKit 2 3class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { 4 5 var screenHeight: CGFloat! 6 var screenWidth: CGFloat! 7 8 let screenNames = ["main01", "main01", "main02", "main03", "main09", "main02", "main03", "main09", "main02"] 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 // Do any additional setup after loading the view, typically from a nib. 13 self.automaticallyAdjustsScrollViewInsets = false 14 // セルのNibを登録 15 self.collectionView!.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "cell") 16 } 17 18 // 希望のセルサイズを返す 19 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 20 21 let screenSize: CGRect = UIScreen.main.bounds 22 screenWidth = screenSize.width 23 screenHeight = screenSize.height 24 let returnSize = CGSize(width: screenWidth, height: screenHeight) 25 26 return returnSize 27 } 28 29 //セル間のマージンを削除 30 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 31 return 0.0 32 } 33 34 //データの個数を返す 35 override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 36 { 37 return screenNames.count 38 } 39 40 //データを返す 41 override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 42 { 43 let cell: CollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath as IndexPath) as! CollectionViewCell 44 45 cell.mainImage.image = UIImage(named: screenNames[indexPath.row]) 46 47 return cell 48 } 49 50 override func didReceiveMemoryWarning() { 51 super.didReceiveMemoryWarning() 52 // Dispose of any resources that can be recreated. 53 } 54}

カスタムセルクラス

import UIKit class CollectionViewCell: UICollectionViewCell { @IBOutlet weak var mainImage: UIImageView! override func awakeFromNib() { super.awakeFromNib() // Initialization code } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラー的にはmainImageが定義されていないようです、@IBOutletを結んでから名前を変更したりしたと思います、接続を確認してみてください。

投稿2017/02/06 23:40

_Kentarou

総合スコア8490

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

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

退会済みユーザー

退会済みユーザー

2017/02/07 00:23

ご回答ありがとうございます。 mainImageをimageに変更してみましたが、同じエラーでmainImageのところがimageに変わってるだけでした。 そもそも接続方法が間違っているのでしょうか。
_Kentarou

2017/02/07 03:43

接続方法は難しく無いので間違えているということはないと思います、一旦接続を解除してからもう一度結んだ方が早いと思いますよ。
退会済みユーザー

退会済みユーザー

2017/02/07 08:47

表示することができました。 最初はxibでFile's Ownerをカスタムクラスに設定し、xibからctrl+ドラッグで接続していました。 Referencing OutletsがmainImage----File's Ownerになっていて、File's Ownerをカスタムセルクラスにしたら表示することができました。 File's Ownerのカスタムクラスをカスタムセルクラスに設定していたのですが、mainImage----File's Ownerで表示できないのは仕方ないのでしょうか?
_Kentarou

2017/02/07 11:42

File's Ownerをカスタムクラスにしなくてもxibと一緒に生成した状態のままで結べますよ。
退会済みユーザー

退会済みユーザー

2017/02/07 13:22

ありがとうございます。 勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問