diff --git a/KDCalendar/CalendarView/CalendarDayCell.swift b/KDCalendar/CalendarView/CalendarDayCell.swift index fe31250..3c62a94 100644 --- a/KDCalendar/CalendarView/CalendarDayCell.swift +++ b/KDCalendar/CalendarView/CalendarDayCell.swift @@ -68,6 +68,21 @@ open class CalendarDayCell: UICollectionViewCell { } } + var isBlackout: Bool = false { + didSet { + switch isBlackout { + case true: + self.textLabel.textColor = CalendarView.Style.cellTextColorBlackout + self.bgView.backgroundColor = CalendarView.Style.cellColorBlackout + self.bgView.layer.borderWidth = CalendarView.Style.cellBorderWidthBlackout + case false: + self.bgView.backgroundColor = CalendarView.Style.cellColorDefault + self.bgView.layer.borderWidth = CalendarView.Style.cellBorderWidth + self.textLabel.textColor = CalendarView.Style.cellTextColorDefault + } + } + } + override open var isSelected: Bool { didSet { switch isSelected { diff --git a/KDCalendar/CalendarView/CalendarHeaderView.swift b/KDCalendar/CalendarView/CalendarHeaderView.swift index 8a2b60d..6dfe4fe 100644 --- a/KDCalendar/CalendarView/CalendarHeaderView.swift +++ b/KDCalendar/CalendarView/CalendarHeaderView.swift @@ -49,11 +49,11 @@ open class CalendarHeaderView: UIView { let weekdayLabel = UILabel() - weekdayLabel.font = UIFont(name: CalendarView.Style.headerFontName, size: 14.0) + weekdayLabel.font = UIFont(name: CalendarView.Style.headerDayFontName, size: CalendarView.Style.headerDayFontSize) weekdayLabel.text = formatter.shortWeekdaySymbols[(index % 7)] - weekdayLabel.textColor = CalendarView.Style.headerTextColor + weekdayLabel.textColor = CalendarView.Style.headerDayTextColor weekdayLabel.textAlignment = NSTextAlignment.center v.addSubview(weekdayLabel) diff --git a/KDCalendar/CalendarView/CalendarView+DataSource.swift b/KDCalendar/CalendarView/CalendarView+DataSource.swift index ad7aae7..4e614f7 100644 --- a/KDCalendar/CalendarView/CalendarView+DataSource.swift +++ b/KDCalendar/CalendarView/CalendarView+DataSource.swift @@ -117,7 +117,7 @@ extension CalendarView: UICollectionViewDataSource { } if let delegate = self.delegate, let dateBeingSelected = self.dateFromIndexPath(indexPath) { if delegate.calendar(self, canSelectDate: dateBeingSelected) == false { - dayCell.isWeekend = true + dayCell.isBlackout = true } } if let eventsForDay = self.eventsByIndexPath[indexPath] { diff --git a/KDCalendar/CalendarView/CalendarView+Delegate.swift b/KDCalendar/CalendarView/CalendarView+Delegate.swift index 9f36c97..7e23b46 100644 --- a/KDCalendar/CalendarView/CalendarView+Delegate.swift +++ b/KDCalendar/CalendarView/CalendarView+Delegate.swift @@ -32,11 +32,10 @@ extension CalendarView: UICollectionViewDelegateFlowLayout { guard let date = self.dateFromIndexPath(indexPath) else { return } if let index = selectedIndexPaths.index(of: indexPath) { - - delegate?.calendar(self, didDeselectDate: date) - - selectedIndexPaths.remove(at: index) - selectedDates.remove(at: index) + // We want to prevent deselecting ship date +// delegate?.calendar(self, didDeselectDate: date) +// selectedIndexPaths.remove(at: index) +// selectedDates.remove(at: index) } else { diff --git a/KDCalendar/CalendarView/CalendarView+Style.swift b/KDCalendar/CalendarView/CalendarView+Style.swift index 371f342..556cb9a 100644 --- a/KDCalendar/CalendarView/CalendarView+Style.swift +++ b/KDCalendar/CalendarView/CalendarView+Style.swift @@ -9,9 +9,8 @@ import UIKit extension CalendarView { - + /// This is the view model public struct Style { - public enum CellShapeOptions { case round case square @@ -37,12 +36,14 @@ extension CalendarView { //Header public static var headerHeight: CGFloat = 80.0 public static var headerTextColor = UIColor.gray + public static var headerDayTextColor = UIColor.gray public static var headerFontName: String = "Helvetica" public static var headerFontSize: CGFloat = 20.0 + public static var headerDayFontName: String = "Helvetica" + public static var headerDayFontSize: CGFloat = 14.0 //Common public static var cellShape = CellShapeOptions.bevel(4.0) - public static var firstWeekday = FirstWeekdayOptions.monday //Default Style @@ -66,5 +67,10 @@ extension CalendarView { public static var cellBorderWidthWeekend = CGFloat(0.0) public static var cellColorWeekend = UIColor(red:1.00, green:0.84, blue:0.65, alpha:1.00) + //Blackout Style + public static var cellTextColorBlackout = UIColor(red:1.00, green:0.84, blue:0.65, alpha:1.00) + public static var cellBorderWidthBlackout = CGFloat(0.0) + public static var cellColorBlackout = UIColor(red:1.00, green:0.84, blue:0.65, alpha:1.00) + } } diff --git a/KDCalendar/CalendarView/CalendarView.swift b/KDCalendar/CalendarView/CalendarView.swift index 0d38f2f..7f6750c 100644 --- a/KDCalendar/CalendarView/CalendarView.swift +++ b/KDCalendar/CalendarView/CalendarView.swift @@ -81,7 +81,7 @@ public class CalendarView: UIView { public lazy var calendar: Calendar = { var gregorian = Calendar(identifier: .gregorian) - gregorian.timeZone = TimeZone(abbreviation: "UTC")! + //gregorian.timeZone = TimeZone(abbreviation: "UTC")! return gregorian }() @@ -329,8 +329,7 @@ extension CalendarView { function: - scroll calendar at date (month/year) passed as parameter. */ public func setDisplayDate(_ date: Date, animated: Bool = false) { - - guard (date >= startDateCache) && (date <= endDateCache) else { return } + guard (date >= startOfMonthCache) && (date <= endDateCache) else { return } self.collectionView.setContentOffset(self.scrollViewOffset(for: date), animated: animated) self.displayDateOnHeader(date) } @@ -372,6 +371,18 @@ extension CalendarView { goToMonthWithOffet(1) } + public func isLastMonth() -> Bool { + var dateComponents = DateComponents() + dateComponents.month = 1 + guard let displayDate = self.displayDate else { return true } + guard let newDate = self.calendar.date(byAdding: dateComponents, to: displayDate) else { return true } + if newDate <= endDateCache { + return false + } else { + return true + } + } + /* method: - goToPreviousMonth function: - scroll the calendar by one month in the past @@ -380,6 +391,18 @@ extension CalendarView { goToMonthWithOffet(-1) } + public func isFirstMonth() -> Bool { + var dateComponents = DateComponents() + dateComponents.month = -1 + guard let displayDate = self.displayDate else { return true } + guard let newDate = self.calendar.date(byAdding: dateComponents, to: displayDate) else { return true } + if newDate >= startOfMonthCache { + return false + } else { + return true + } + } + public func loadEvents(onComplete: ((Error?) -> Void)? = nil) { EventsManager.load(from: self.startDateCache, to: self.endDateCache) { // (events:[CalendarEvent]?) in