collectionViewCellの中にLabelを配置したい。
1. StoryBoardで設置する方法
新たなファイルを作らず簡単に設置できる。
cell内にLabel配置→Tagを1にする→コードを書く
//セルに情報を入れる関数 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { //表示するセルの登録 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) cell.backgroundColor = .white //セルの色 //境界線 cell.layer.borderColor = UIColor.lightGray.cgColor cell.layer.borderWidth = 0.3 //ラベル let label = cell.contentView.viewWithTag(1) as! UILabel label.text = "hi" label.textColor = UIColor.red return cell }
2. collectionViewCellファイルを別に作ってコードで配置する方法
Storyboard上でラベルを設置しなくてよい。
サブクラスがcollectionViewCellのファイル「CollectionViewCell.swift」を作成
→storyboardのcellに対応するCustomClassをさっき作った「CollectionViewCell」に設定
→CollectionViewCell.swiftで以下のようにLabelを生成して必要なコードを書く
import UIKit class CalendarCell: UICollectionViewCell { var textLabel: UILabel! required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! // UILabelを生成 textLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.frame.width / 6, height: self.frame.height / 5)) textLabel.font = UIFont(name: "HiraKakuProN-W3", size: 13) textLabel.textAlignment = NSTextAlignment.center textLabel.text = "a" textLabel.backgroundColor = .lightGray textLabel.textColor = .black // Cellに追加 self.addSubview(textLabel!) } override init(frame: CGRect) { super.init(frame: frame) } }
・補足:CollectionViewCell.swiftで生成したlabelをViewController.swiftで扱う方法
//表示するセルの登録
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: “cell”, for: indexPath) as! CalendarCell
最後にas! CalendarCellをつけることで、cell.textLabel.text = “b”みたいに使える。
//セルに情報を入れる関数 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { //表示するセルの登録 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CalendarCell cell.backgroundColor = .white //境界線 cell.layer.borderColor = UIColor.lightGray.cgColor cell.layer.borderWidth = 0.3 //テキスト cell.textLabel.text = "b" return cell }