2017-07-11 7 views
0

UICollectionViewの各セルにボタンをプログラムで作成しようとしています。ただし、最初のボタンだけが表示されます。私は印刷文を追加して、私のセルが持っているサブビューを見てみました。ボタンは存在しますが、画面には表示されません。ボタンをクリックすると複数のボタンがUICollectionViewCellに表示されない

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) 
    // Configure the cell 

    let button = UIButton(frame: cell.frame) 
    button.addTarget(self, action: #selector(cellClicked), for: UIControlEvents.touchUpInside) 
    button.backgroundColor = UIColor.red 
    button.tag = indexPath.row 
    cell.addSubview(button) 

    print(cell.subviews) 

    return cell 
} 

はまた、私はprint文を追加し、最初のボタンは、すべてのヘルプははるかに高く評価されるまで表示され、0

@IBAction func cellClicked(sender: UIButton) { 
    print(sender.tag) 
} 

Here is a screenshot of the collection view, there should be two buttons in the picture but only one appears

を出力します。

+0

あなたの 'collectionView'データソースにはいくつのデータレコードがありますか? – Lawliet

+0

私は現在のテストケースに2つのデータレコードを持っています – Armand

答えて

0

セルを再利用すると、新しいボタンが作成されるため、データソースにボタンを追加することは非常に悪いことです。 Interface Builderを使用している場合は、ボタンを直接追加してください。そしてそれらのプロパティを調整することができます。また、カスタムセルを定義し、コンセントをCTRL-ドラッグすることもできます。またはコレクションビューのデリゲートで選択を処理します。

optional public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 

別の解決策は、セルのawakeFromNib()でボタンを追加され、これは一度だけ呼び出されます。

+0

私は提案したようにセルのawakeFormNib()にコードを追加していました。ありがとうございました! – Armand

関連する問題