はじめに
今回はFScalendarを使ったカレンダーを日付ごとに線で区切る方法について書きます。
デフォルトでは以下のように区切りのないカレンダーが表示されます。
勝手に簡単にカスタマイズできそうだと思っていたのですが、公式マニュアル含め色々と調べてもなかなかピンポイントの情報を見つることができず苦労しました。備忘録を兼ねて、実装方法について書きたいと思います。
この記事を読むにあたって
FScalendar自体の設定方法については割愛します。既にライブラリを導入しdelegate等の設定を済ませた上で参考にしていただけたらと思います。
実装方法
まず、今回はcalendarという変数名でFSCalendarのViewをリンクさせます。
@IBOutlet weak var calendar: FSCalendar!
cellForメソッドを使って枠線を実装します。
FSCalendarDataSourceプロトコルを適応させた状態で、cellForと入力すると補完で出てきます。
func calendar(_ calendar: FSCalendar, cellFor date: Date, at position: FSCalendarMonthPosition) -> FSCalendarCell {
let cell = calendar.dequeueReusableCell(withIdentifier: "CELL", for: date, at: position)
cell.layer.borderColor = UIColor.gray.cgColor
cell.layer.borderWidth = 0.5
return cell
}
}
delegateを設定しているので、画面に表示される日付のセルの数だけこのcellFor関数が呼ばれているようです。この中で引数dateで渡ってきた日付のcellのborderColorとborderWidthを設定して返すようにしました。これで表示される全てのセルにこの処理が適応されカレンダーのセルに灰色で太さ0.5の枠線をつけることができます。
上記コードでwithIdentifierを"CELL"と任意の名前を設定しています。
viewdidroadに以下を入れてFSCalendarCellのIdentifierを先ほど任意で決めた名前"CELL"に設定します
override func viewDidLoad() {
super.viewDidLoad()
calendar.register(FSCalendarCell.self, forCellReuseIdentifier: "CELL")
}
以下はコード全文
import UIKit
import FSCalendar
class ViewController: UIViewController ,FSCalendarDataSource{
@IBOutlet weak var calendar: FSCalendar!
override func viewDidLoad() {
super.viewDidLoad()
calendar.register(FSCalendarCell.self, forCellReuseIdentifier: "CELL")
}
func calendar(_ calendar: FSCalendar, cellFor date: Date, at position: FSCalendarMonthPosition) -> FSCalendarCell {
let cell = calendar.dequeueReusableCell(withIdentifier: "CELL", for: date, at: position)
cell.layer.borderColor = UIColor.gray.cgColor
cell.layer.borderWidth = 0.5
return cell
}
}
これでシュミレータを起動すると、
枠線がつきました!
最後に
もっと良い方法があればコメントなどで教えていただけたら嬉しいです。
最後まで読んでいただきありがとうございます!