FSCalendar/Example-Swift/FSCalendarSwiftExample/InterfaceBuilderViewControl...

168 lines
6.6 KiB
Swift

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