Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // CalendarViewController.swift
- // KIPU
- //
- // Created by Elvis on 4/22/18.
- // Copyright © 2018 Elvis. All rights reserved.
- //
- import UIKit
- import VACalendar
- public var oneDayTimeInterval: TimeInterval = 86400
- class CalendarViewController: BaseViewController {
- @IBOutlet weak var tableView: UITableView!
- @IBOutlet var tableHeaderView: UIView!
- @IBOutlet weak var calendarContainerView: UIView!
- @IBOutlet weak var monthHeaderView: VAMonthHeaderView! {
- didSet {
- }
- }
- @IBOutlet weak var weekDaysView: VAWeekDaysView! {
- didSet {
- let appereance = VAWeekDaysViewAppearance(symbolsType: .veryShort, calendar: defaultCalendar)
- weekDaysView.appearance = appereance
- }
- }
- let defaultCalendar: Calendar = {
- var calendar = Calendar.current
- calendar.firstWeekday = 1
- calendar.timeZone = TimeZone(secondsFromGMT: 0)!
- return calendar
- }()
- var calendarView: VACalendarView!
- let cellIdentifier = "cellIdentifier"
- var viewModel = CalendarViewControllerVM()
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- self.title = "Календарь"
- self.tableView.register(EventCell.className, forCellReuseIdentifier: self.cellIdentifier)
- self.viewModel.requestEvents()
- self.setupCalendar()
- self.tableView.tableHeaderView = self.tableHeaderView
- self.tableView.rowHeight = UITableViewAutomaticDimension
- self.tableView.estimatedRowHeight = 100
- self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(createEvent))
- }
- @objc func createEvent() {
- let vc = CreateEventViewController()
- vc.hidesBottomBarWhenPushed = true
- self.navigationController?.pushViewController(vc, animated: true)
- }
- private func setupCalendar() {
- var frame = self.calendarContainerView.frame
- frame.origin = .zero
- let calendar = VACalendar(calendar: self.defaultCalendar)
- self.calendarView = VACalendarView(frame: frame, calendar: calendar)
- self.calendarContainerView.addSubview(self.calendarView)
- self.calendarView.showDaysOut = true
- self.calendarView.selectionStyle = .single
- self.calendarView.monthDelegate = monthHeaderView
- self.calendarView.dayViewAppearanceDelegate = self
- self.calendarView.monthViewAppearanceDelegate = self
- self.calendarView.calendarDelegate = self
- self.calendarView.scrollDirection = .horizontal
- self.calendarView.setup()
- var ed: [(Date, [VADaySupplementary])] = []
- for date in self.viewModel.eventsDate {
- ed.append((date, [VADaySupplementary.bottomDots([.red])]))
- }
- self.calendarView.setSupplementaries(ed)
- }
- }
- extension CalendarViewController: UITableViewDataSource {
- func numberOfSections(in tableView: UITableView) -> Int {
- return 1
- }
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return self.viewModel.events.count
- }
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier) as! EventCell
- cell.setup(self.viewModel.events[indexPath.row])
- return cell
- }
- }
- extension CalendarViewController: UITableViewDelegate {
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- tableView.deselectRow(at: indexPath, animated: true)
- let vm = self.viewModel.events[indexPath.row]
- let vc = NewsDetailsViewController(eventVM: vm)
- vc.hidesBottomBarWhenPushed = true
- self.navigationController?.pushViewController(vc, animated: true)
- }
- }
- extension CalendarViewController: VAMonthViewAppearanceDelegate {
- func leftInset() -> CGFloat {
- return 10.0
- }
- func rightInset() -> CGFloat {
- return 10.0
- }
- func verticalMonthTitleFont() -> UIFont {
- return UIFont.systemFont(ofSize: 16, weight: .semibold)
- }
- func verticalMonthTitleColor() -> UIColor {
- return .black
- }
- func verticalCurrentMonthTitleColor() -> UIColor {
- return .red
- }
- }
- extension CalendarViewController: VADayViewAppearanceDelegate {
- func textColor(for state: VADayState) -> UIColor {
- switch state {
- case .out:
- return UIColor(red: 214 / 255, green: 214 / 255, blue: 219 / 255, alpha: 1.0)
- case .selected:
- return .white
- case .unavailable:
- return .lightGray
- default:
- return .black
- }
- }
- func textBackgroundColor(for state: VADayState) -> UIColor {
- switch state {
- case .selected:
- return .red
- default:
- return .clear
- }
- }
- func shape() -> VADayShape {
- return .circle
- }
- func dotBottomVerticalOffset(for state: VADayState) -> CGFloat {
- switch state {
- case .selected:
- return 2
- default:
- return -7
- }
- }
- }
- extension CalendarViewController: VACalendarViewDelegate {
- func selectedDate(_ date: Date) {
- self.navigationController?.pushViewController(CalendarDetailsViewController(events: self.selectedEvents(date)), animated: true)
- self.calendarView.selectDates([Date()])
- }
- private func selectedEvents(_ date: Date) -> [EventCellVM] {
- return self.viewModel.events.filter {
- return date.compare(Date(timeIntervalSince1970: $0.model.startDate))
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement