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

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

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

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

Q&A

1回答

2751閲覧

swift オブジェクトを別ファイルで定義

S.T

総合スコア93

Swift

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

0グッド

0クリップ

投稿2015/10/24 15:57

お世話になります!
初歩的で恐縮ですが、1つご質問させてください。

UICollectionViewを別ファイルで定義して、ViewContorollerで呼び出すコードを書きたいのですが、方法がわかりません。

以下に現在のコードを掲載いたしますので、ご指摘いただけましたらと思ってます!

###ソースコード

swift

1 2import UIKit 3 4class ViewController: UIViewController { 5 6 var CollectionView: UICollectionView! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11 12 let collection = CollectionView 13 collection 14 15 16 17 18 19 } 20 21 override func didReceiveMemoryWarning() { 22 super.didReceiveMemoryWarning() 23 // Dispose of any resources that can be recreated. 24 } 25 26 27}

###ソースコード

swift

1import UIKit 2 3class CollectionView: UIViewController,UICollectionViewDelegate, UICollectionViewDataSource { 4 5 func collection() -> UICollectionView { 6 var CollectionView: UICollectionView! 7 8 let layout = UICollectionViewFlowLayout() 9 10 layout.itemSize = CGSizeMake(50, 50) 11 12 layout.headerReferenceSize = CGSizeMake(100, 30) 13 14 CollectionView = UICollectionView(frame: self.view.frame,collectionViewLayout: layout) 15 16 CollectionView.registerClass(CustomUICollectionViewCell.self, forCellWithReuseIdentifier: "MyCell") 17 18 CollectionView.delegate = self 19 20 CollectionView.dataSource = self 21 22 self.view.addSubview(CollectionView) 23 24 return CollectionView 25 } 26 27 28 /* 29 Cellが選択された際に呼び出される 30 */ 31 func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 32 33 print("Num: \(indexPath.row)") 34 35 } 36 37 /* 38 Cellの総数を返す 39 */ 40 func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 41 return 100 42 } 43 44 /* 45 Cellに値を設定する 46 */ 47 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 48 49 let cell : CustomUICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! CustomUICollectionViewCell 50 cell.textLabel?.text = indexPath.row.description 51 52 return cell 53 } 54 55} 56 57

以上、お願いします!

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

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

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

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

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

guest

回答1

0

「ViewContorollerで呼び出す」という言葉の具体的な意図が明確でなく、さらに質問のコードのCollectionViewクラスがUIViewControllerのサブクラスとなっていて余計混乱するものになっているため、質問の意図をいくつか想定して回答してみます。

この質問の意図が、ViewControllerから別のViewController(CollectionView)に画面遷移させたいということなら、presentViewControllerを使えばいいです。ただし、presentViewControllerを実行できるのは、ViewControllerで画面を表示した後ですので、viewDidLoadで実行してもエラーになります。viewDidAppearで実行するか、ボタン操作等の処理で実行すれば遷移できます。
(参考)
http://tech.eversense.co.jp/159

そうではなくて、ViewControllerで表示しているViewの中に別のViewController(CollectionView)のViewを表示させたいということなら、childViewControllerとして実装し、addSubviewでViewを追加すればよいです。
(参考)
http://qiita.com/edo_m18/items/8b6b457f82b185ab1f6a

そうではなくて、そもそもCollectionViewクラスをUIViewControllerのサブクラスとして定義しているのが明確な意図を持ってやっているものではなくて、純粋に「UICollectionViewを別ファイルで定義し、それをViewControllerのviewの中に表示する」ということがしたいだけであれば、CollectionViewを(UIViewControllerのサブクラスでなく)UICollectionViewのサブクラスとして定義し、そのCollectionViewをViewControllerのviewDidLoad内で生成してaddSubviewでviewに追加すればよいと思います。

投稿2015/10/25 02:22

TakeOne

総合スコア6299

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問