配列に文字列があるのと同じ数のcollectionViewCells
をbuttons
で表示したい。しかし、シミュレータを起動すると、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の接続は次のとおりです。
ストーリーボード上のView Controller:
CollectionViewController
をストーリーボードIDインスペクターに設定しましたか? :)
そして、viewDidLoad
メソッドのデータを変更した後、reloadData()
を呼び出そうとします。
役立つことを願っています
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()
}
これが機能する場合、ニーズに合わせてレイアウトオプションを変更できます。
問題はボタンにタイトルを設定することにあり、次のコードを使用します。
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
}
それが役に立てば幸い
私は同様の問題を抱えていた、私はこれが私の細胞の大きさを何らかの形で制限していることがわかりました。お役に立てれば。
以下に示すように、storyBoardでCollectionViewアウトレット(データソース、デリゲート)を設定していることを確認してください
アイデア:
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
}
まず、この方法を使用したことを確認してください。
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return searches.count
}
セクションごとに1つの検索があるため、セクションの数は検索配列の数です。したがって、必要に応じてこのメソッドを使用することもできます。デフォルトでは、retuen 1を使用できます。
より良い解決のためにリンクの手順に従ってください このリンクをチェックしてください