0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FScalendarの日付ごとに区切り線を入れるやり方

Last updated at Posted at 2023-03-18

はじめに

今回はFScalendarを使ったカレンダーを日付ごとに線で区切る方法について書きます。
デフォルトでは以下のように区切りのないカレンダーが表示されます。
1dbaf22f81f91e14428694b8eb24a3b2.png

勝手に簡単にカスタマイズできそうだと思っていたのですが、公式マニュアル含め色々と調べてもなかなかピンポイントの情報を見つることができず苦労しました。備忘録を兼ねて、実装方法について書きたいと思います。

この記事を読むにあたって

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
    }
}

これでシュミレータを起動すると、

6d495b97aa87c8d89ecf1f0ca345b651.png

枠線がつきました!

最後に

もっと良い方法があればコメントなどで教えていただけたら嬉しいです。
最後まで読んでいただきありがとうございます!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?