27010


プログラム初心者です。

１つのコレクションビューに２つのコレクションビューセルを表示させるため、プログラムを書いたのですが、２つ目のセルが表示されません。

どなたか解決法をご教示いただけないでしょうか。

２種類のカスタムセルはサブクラス化し、別々のファイルで作成しました。

以下、ViewController.swiftのコードです。

[code]

    //  ViewController.swift
    
    import UIKit
    
    class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
    
        var collectionView: UICollectionView?
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    
        override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nil, bundle: nil)
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.setupSubviews()
            self.autolayoutSubviews()
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
        func setupSubviews() {
            let flowLayout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
            flowLayout.minimumInteritemSpacing = 10.0
            flowLayout.minimumLineSpacing = 10.0
            flowLayout.sectionInset = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 10.0, right: 10.0)
            flowLayout.itemSize = CGSizeMake(300.0, 100.0)
    
            self.collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: flowLayout)
            self.collectionView!.translatesAutoresizingMaskIntoConstraints = false
            self.collectionView!.dataSource = self
            self.collectionView!.delegate = self
            self.collectionView!.registerClass(Cell1.self, forCellWithReuseIdentifier: "Cell1")
            self.collectionView!.registerClass(Cell2.self, forCellWithReuseIdentifier: "Cell2")
            self.collectionView!.backgroundColor = UIColor.whiteColor()
            self.view.addSubview(self.collectionView!)
        }
    
        func autolayoutSubviews() {
            self.collectionView!.topAnchor.constraintEqualToAnchor(self.view.topAnchor).active = true
            self.collectionView!.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor).active = true
            self.collectionView!.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor).active = true
            self.collectionView!.bottomAnchor.constraintEqualToAnchor(self.view.bottomAnchor).active = true
        }
    
        func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return 2
        }
    
        func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    
            let cell1: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell1", forIndexPath: indexPath) as! Cell1
            cell1.backgroundColor = UIColor.grayColor()
            return cell1
    
            let cell2: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell2", forIndexPath: indexPath) as! Cell2
            //cell2.backgroundColor = UIColor.brownColor()
            //return cell2
        }
    }
    
[/code]

よろしくお願い致します。


CC BY-SA 3.0
2016-06-21T07:12:29.160
26913
2016-10-26T01:37:43.293
2016-10-26T01:37:43.293
7256
16775
question
swift uicollectionview uicollectionviewcell
swiftで１つのcollectionViewに２つのcollectionViewCellを表示させる方法


コメントで確認させてもらったように、今回はセル1とセル2を交互に、と言うことにしておきます。  
(コメントのやり取りの中で、あいまいだった条件がはっきりしてきた場合、できればご質問を編集して追記しておいてください。)

[code]

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        //indexPathから、どちらのcellを表示するかの情報を取得する
        //今回は偶数番目ならCell1, 奇数番目ならCell2とする
        let cellTypeNumber = indexPath.item % 2
    
        switch cellTypeNumber {
        case 0:
            //セルID="Cell1"に結びつけたクラスがCell1であること
            let cell1 = collectionView.dequeueReusableCellWithReuseIdentifier("Cell1", forIndexPath: indexPath) as! Cell1
            cell1.backgroundColor = UIColor.grayColor()
            return cell1
        //`case 1`としたいところだが、`caseを尽くしていない`というエラーを避けるため`default`にする
        default:
            //セルID="Cell2"に結びつけたクラスがCell2であること
            let cell2 = collectionView.dequeueReusableCellWithReuseIdentifier("Cell2", forIndexPath: indexPath) as! Cell2
            cell2.backgroundColor = UIColor.brownColor()
            return cell2
        }
    }
    
[/code]

もしかしたら、「それで良いんなら近いことをやってみたんだが…」と言ったコードになっているかもしれません。お試しの上、うまくいかない点があればおしらせください。


CC BY-SA 3.0
2016-06-23T13:47:31.257
27010
2016-06-23T13:47:31.257
13972
26913
answer