// // ViewController.swift // FSCalendarSwiftExample // // Created by Wenchao Ding on 9/3/15. // Copyright (c) 2015 wenchao. All rights reserved. // import UIKit class InterfaceBuilderViewController: UIViewController, FSCalendarDataSource, FSCalendarDelegate { @IBOutlet weak var calendar: FSCalendar! @IBOutlet weak var calendarHeightConstraint: NSLayoutConstraint! fileprivate var lunar: Bool = false { didSet { self.calendar.reloadData() } } fileprivate let lunarFormatter = LunarFormatter() fileprivate var theme: Int = 0 { didSet { switch (theme) { case 0: self.calendar.appearance.weekdayTextColor = UIColor(red: 14/255.0, green: 69/255.0, blue: 221/255.0, alpha: 1.0) self.calendar.appearance.headerTitleColor = UIColor(red: 14/255.0, green: 69/255.0, blue: 221/255.0, alpha: 1.0) self.calendar.appearance.eventDefaultColor = UIColor(red: 31/255.0, green: 119/255.0, blue: 219/255.0, alpha: 1.0) self.calendar.appearance.selectionColor = UIColor(red: 31/255.0, green: 119/255.0, blue: 219/255.0, alpha: 1.0) self.calendar.appearance.headerDateFormat = "MMMM yyyy" self.calendar.appearance.todayColor = UIColor(red: 198/255.0, green: 51/255.0, blue: 42/255.0, alpha: 1.0) self.calendar.appearance.borderRadius = 1.0 self.calendar.appearance.headerMinimumDissolvedAlpha = 0.2 case 1: self.calendar.appearance.weekdayTextColor = UIColor.red self.calendar.appearance.headerTitleColor = UIColor.darkGray self.calendar.appearance.eventDefaultColor = UIColor.green self.calendar.appearance.selectionColor = UIColor.blue self.calendar.appearance.headerDateFormat = "yyyy-MM"; self.calendar.appearance.todayColor = UIColor.red self.calendar.appearance.borderRadius = 1.0 self.calendar.appearance.headerMinimumDissolvedAlpha = 0.0 case 2: self.calendar.appearance.weekdayTextColor = UIColor.red self.calendar.appearance.headerTitleColor = UIColor.red self.calendar.appearance.eventDefaultColor = UIColor.green self.calendar.appearance.selectionColor = UIColor.blue self.calendar.appearance.headerDateFormat = "yyyy/MM" self.calendar.appearance.todayColor = UIColor.orange self.calendar.appearance.borderRadius = 0 self.calendar.appearance.headerMinimumDissolvedAlpha = 1.0 default: break; } } } fileprivate let formatter: DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "yyyy/MM/dd" return formatter }() fileprivate let gregorian: NSCalendar! = NSCalendar(calendarIdentifier:NSCalendar.Identifier.gregorian) fileprivate let datesWithCat = ["2015/05/05","2015/06/05","2015/07/05","2015/08/05","2015/09/05","2015/10/05","2015/11/05","2015/12/05","2016/01/06", "2016/02/06","2016/03/06","2016/04/06","2016/05/06","2016/06/06","2016/07/06"] // MARK:- Life cycle override func viewDidLoad() { super.viewDidLoad() if UIDevice.current.model.hasPrefix("iPad") { self.calendarHeightConstraint.constant = 400 } self.calendar.appearance.caseOptions = [.headerUsesUpperCase,.weekdayUsesUpperCase] self.calendar.select(self.formatter.date(from: "2017/08/10")!) let scopeGesture = UIPanGestureRecognizer(target: self.calendar, action: #selector(self.calendar.handleScopeGesture(_:))) self.calendar.addGestureRecognizer(scopeGesture) // For UITest self.calendar.accessibilityIdentifier = "calendar" } // MARK:- FSCalendarDataSource func calendar(_ calendar: FSCalendar, titleFor date: Date) -> String? { return self.gregorian.isDateInToday(date) ? "今天" : nil } func calendar(_ calendar: FSCalendar, subtitleFor date: Date) -> String? { guard self.lunar else { return nil } return self.lunarFormatter.string(from: date) } func maximumDate(for calendar: FSCalendar) -> Date { return self.formatter.date(from: "2017/10/30")! } func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int { let day: Int! = self.gregorian.component(.day, from: date) return day % 5 == 0 ? day/5 : 0; } func calendar(_ calendar: FSCalendar, imageFor date: Date) -> UIImage? { let day: Int! = self.gregorian.component(.day, from: date) return [13,24].contains(day) ? UIImage(named: "icon_cat") : nil } // MARK:- FSCalendarDelegate func calendarCurrentPageDidChange(_ calendar: FSCalendar) { print("change page to \(self.formatter.string(from: calendar.currentPage))") } func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { print("calendar did select date \(self.formatter.string(from: date))") if monthPosition == .previous || monthPosition == .next { calendar.setCurrentPage(date, animated: true) } } func calendar(_ calendar: FSCalendar, boundingRectWillChange bounds: CGRect, animated: Bool) { self.calendarHeightConstraint.constant = bounds.height self.view.layoutIfNeeded() } // MARK:- Navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let config = segue.destination as? CalendarConfigViewController { config.lunar = self.lunar config.theme = self.theme config.selectedDate = self.calendar.selectedDate config.firstWeekday = self.calendar.firstWeekday config.scrollDirection = self.calendar.scrollDirection } } @IBAction func unwind2InterfaceBuilder(segue: UIStoryboardSegue) { if let config = segue.source as? CalendarConfigViewController { self.lunar = config.lunar self.theme = config.theme self.calendar.select(config.selectedDate, scrollToDate: false) if self.calendar.firstWeekday != config.firstWeekday { self.calendar.firstWeekday = config.firstWeekday } if self.calendar.scrollDirection != config.scrollDirection { self.calendar.scrollDirection = config.scrollDirection } } } }