Edited at

FSCalendar

初心者です。

今回FSCalendarを使ったのでメモとして残しておく。


FSCalendar

https://github.com/WenchaoD/FSCalendar

スター8000を超える有名ライブラリ。

これを使えばすぐにカレンダーが作成できる。

設定もStoryBoardで変更できる。

例えば HeaderDate を YYYY / MM にすると 2019 / 07 に変わる

defaultsは 07/2019なので、自分の好きなように変更できる。

その他にもカスタマイズできるので、あとはgithubを見てください!


やり方

CocoaPod で 下記3つをインストール。

Podfile に pod 'hoge' と記入して pod installでできる。

ViewControllerに記入

import RealmSwift

import FSCalendar
import CalculateCalendarLogic

Realmはカレンダーだけならいらないかも。

StoryboardにUIViewをセットする。

(わざと背景色Grayにしてます。)

Custom Classの項目からFSCalendarを選択

StoryBoardとViewControllerをつなぐ。

final class CalendarViewController: UIViewController,

FSCalendarDelegate,
FSCalendarDataSource,
FSCalendarDelegateAppearance {
@IBOutlet weak var calendar: FSCalendar!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var weightLabel: UILabel!
@IBOutlet weak var alcoholLabel: UILabel!
private let calender: Calendar = Calendar(identifier: .gregorian)
private var year: Int!
private var month: Int!
private var day: Int!

override func viewDidLoad() {
super.viewDidLoad()
self.calendar.delegate = self
self.calendar.dataSource = self
}
}

カレンダーの日付に色つける

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, titleDefaultColorFor date: Date) -> UIColor? {

if self.CheckHoliday(date) {
return UIColor.red
}

let weekday = self.GetWeek(date)
if weekday == 1 {
return UIColor.red
} else if weekday == 7 {
return UIColor.blue
}
return nil
}

選択された時の処理

func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {

let formatter = DateFormatter()
formatter.dateFormat = "yyyy / MM / dd"
dateLabel.text = formatter.string(from: date)
weightLabel.text = "-"
alcoholLabel.text = "-"

(year, month, day) = self.GetDay(date)
let m = String(format: "%02d", month)
let d = String(format: "%02d", day)
let da = "\(String(year)) / \(m) / \(d)"

do {
let realm = try Realm()
let realmObject = realm.objects(WeightModel.self)
let results = realmObject.filter("date = '\(da)'")
for result in results {
if result.date == da {
weightLabel.text = String(result.weight)
if result.alcohol == 0 {
alcoholLabel.text = "飲んだ"
} else {
alcoholLabel.text = "飲んでない"
}
}
}
} catch let error {
print(error)
}
}

private func GetDay(_ date: Date) -> (Int?, Int?, Int?) {
let year = calender.component(.year, from: date)
let month = calender.component(.month, from: date)
let day = calender.component(.day, from: date)
return (year, month, day)
}

private func CheckHoliday(_ date: Date) -> Bool {
(year, month, day) = self.GetDay(date)
let holiday = CalculateCalendarLogic()
return holiday.judgeJapaneseHoliday(year: year, month: month, day: day)
}
// 一週間の数を取得
private func GetWeek(_ date: Date) -> Int {
return calender.component(.weekday, from: date)
}
// データ作成ページへ
@IBAction func TransitonToAddWeightController(_ sender: Any) {
let addWeightViewController: UIViewController = AddWeightViewController()
self.navigationController?.pushViewController(addWeightViewController, animated: true)
}

簡単にカレンダーが作成できる。

今回はQitaの記事を参考に作ってみました。

データを入れてないので、写ってないですが、日付を選択したら下の部分にデータが出るようになってます。

初心者の私でも簡単に作れるのでおすすめです!!

参考記事

https://qiita.com/yanashi222/items/121b549852bedf391377