web-dev-qa-db-ja.com

コレクションビューのセルが表示されない

配列に文字列があるのと同じ数のcollectionViewCellsbuttonsで表示したい。しかし、シミュレータを起動すると、CollectionViewの背景だけが表示されますが、セルは表示されません。エラーは何ですか?

Main.storyboardのCollectionViewControllerにアタッチしたCollectionViewのコードは次のとおりです。

class CollectionViewController: UICollectionViewController {

var Array = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    Array = ["1","2","3","4","5"]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int) -> Int {
    return Array.count
}

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        button.titleLabel?.text = Array[indexPath.row]

        return cell
}

}

Collection View Controllerの接続は次のとおりです。

connections

ストーリーボード上のView Controller:

viewcontroller

14
maidi

CollectionViewControllerをストーリーボードIDインスペクターに設定しましたか? :)

そして、viewDidLoadメソッドのデータを変更した後、reloadData()を呼び出そうとします。

役立つことを願っています

13
Pavel Smejkal
func layoutCells() {
        let layout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10)
        layout.minimumInteritemSpacing = 5.0
        layout.minimumLineSpacing = 5.0
        layout.itemSize = CGSize(width: (UIScreen.mainScreen().bounds.size.width - 40)/3, height: ((UIScreen.mainScreen().bounds.size.width - 40)/3))
        collectionView!.collectionViewLayout = layout
    }

これを試して。ロードされたビューからこの関数を呼び出します。問題は、コレクションが正しくレイアウトされていないことだと思います。

func viewDidLoad() {
    layoutCells()
}

これが機能する場合、ニーズに合わせてレイアウトオプションを変更できます。

3
Subash

問題はボタンにタイトルを設定することにあり、次のコードを使用します。

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        //button.titleLabel?.text = Array[indexPath.row]
        button.setTitle(Array[indexPath.row], forState: UIControlState.Normal)
        return cell
}

それが役に立てば幸い

3

私は同様の問題を抱えていた、私はこれが私の細胞の大きさを何らかの形で制限していることがわかりました。お役に立てれば。

Select the CollectionViewCell

Find this values in size inspector

2
Ges83

以下に示すように、storyBoardでCollectionViewアウトレット(データソース、デリゲート)を設定していることを確認してください

helpful image link

2

ストーリーボードでUIButtonを選択し、下の画像の左下にあるinstalledを確認します。

enter image description here

1
William Hu

セルに正しい再利用識別子が設定されていることを確認してください。

enter image description here

1
Subash

アイデア:

  • セル再利用識別子が設定されているかどうかを確認してください。
  • ストーリーボードでコレクションビューサブクラスを正しく設定したかどうかを確認してください。
  • print関数内にcellForItemAtIndexPathステートメントを配置して、これが呼び出されているかどうかを確認します。
  • これが問題になるかどうかはわかりませんが、Arrayは実際にはSwiftの型です。それを変数名として使用すると、ロジックが何らかの形で混乱する可能性があります。名前をarray(小文字)に変更します。とにかくこれは変数名のベストプラクティスだと思います。
  • 背景色の変更など、cellForItemAtIndexPathのセルに何か他の操作を行います。それが機能する場合は、タグで何をしているのかが間違っている可能性があります。

あなたの問題は

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int)

メソッドのシグネチャ。違います。そのはず

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

そしてoverride仕様(UICollectionViewControllerには独自のものがあるため、空のコレクションを取得する理由)。

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  return Array.count
}
1
rkyr

まず、この方法を使用したことを確認してください。

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return searches.count
}

セクションごとに1つの検索があるため、セクションの数は検索配列の数です。したがって、必要に応じてこのメソッドを使用することもできます。デフォルトでは、retuen 1を使用できます。

より良い解決のためにリンクの手順に従ってください このリンクをチェックしてください

1