Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 6.00 KB | None | 0 0
  1. //
  2. //  CalendarViewController.swift
  3. //  KIPU
  4. //
  5. //  Created by Elvis on 4/22/18.
  6. //  Copyright © 2018 Elvis. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import VACalendar
  11.  
  12. public var oneDayTimeInterval: TimeInterval = 86400
  13.  
  14. class CalendarViewController: BaseViewController {
  15.    
  16.     @IBOutlet weak var tableView: UITableView!
  17.     @IBOutlet var tableHeaderView: UIView!
  18.     @IBOutlet weak var calendarContainerView: UIView!
  19.    
  20.     @IBOutlet weak var monthHeaderView: VAMonthHeaderView! {
  21.         didSet {
  22.         }
  23.     }
  24.    
  25.     @IBOutlet weak var weekDaysView: VAWeekDaysView! {
  26.         didSet {
  27.             let appereance = VAWeekDaysViewAppearance(symbolsType: .veryShort, calendar: defaultCalendar)
  28.             weekDaysView.appearance = appereance
  29.         }
  30.     }
  31.    
  32.     let defaultCalendar: Calendar = {
  33.         var calendar = Calendar.current
  34.         calendar.firstWeekday = 1
  35.         calendar.timeZone = TimeZone(secondsFromGMT: 0)!
  36.         return calendar
  37.     }()
  38.    
  39.     var calendarView: VACalendarView!
  40.    
  41.     let cellIdentifier = "cellIdentifier"
  42.    
  43.     var viewModel = CalendarViewControllerVM()
  44.  
  45.     override func viewDidLoad() {
  46.         super.viewDidLoad()
  47.  
  48.         // Do any additional setup after loading the view.
  49.         self.title = "Календарь"
  50.        
  51.         self.tableView.register(EventCell.className, forCellReuseIdentifier: self.cellIdentifier)
  52.  
  53.         self.viewModel.requestEvents()
  54.         self.setupCalendar()
  55.        
  56.         self.tableView.tableHeaderView = self.tableHeaderView
  57.         self.tableView.rowHeight = UITableViewAutomaticDimension
  58.         self.tableView.estimatedRowHeight = 100
  59.        
  60.         self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(createEvent))
  61.  
  62.     }
  63.    
  64.     @objc func createEvent() {
  65.         let vc = CreateEventViewController()
  66.         vc.hidesBottomBarWhenPushed = true
  67.         self.navigationController?.pushViewController(vc, animated: true)
  68.     }
  69.  
  70.     private func setupCalendar() {
  71.         var frame = self.calendarContainerView.frame
  72.         frame.origin = .zero
  73.        
  74.         let calendar = VACalendar(calendar: self.defaultCalendar)
  75.         self.calendarView = VACalendarView(frame: frame, calendar: calendar)
  76.         self.calendarContainerView.addSubview(self.calendarView)
  77.        
  78.         self.calendarView.showDaysOut = true
  79.         self.calendarView.selectionStyle = .single
  80.         self.calendarView.monthDelegate = monthHeaderView
  81.         self.calendarView.dayViewAppearanceDelegate = self
  82.         self.calendarView.monthViewAppearanceDelegate = self
  83.         self.calendarView.calendarDelegate = self
  84.         self.calendarView.scrollDirection = .horizontal
  85.         self.calendarView.setup()
  86.        
  87.         var ed: [(Date, [VADaySupplementary])] = []
  88.         for date in self.viewModel.eventsDate {
  89.             ed.append((date, [VADaySupplementary.bottomDots([.red])]))
  90.         }
  91.         self.calendarView.setSupplementaries(ed)
  92.     }
  93. }
  94.  
  95. extension CalendarViewController: UITableViewDataSource {
  96.     func numberOfSections(in tableView: UITableView) -> Int {
  97.         return 1
  98.     }
  99.    
  100.     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  101.         return self.viewModel.events.count
  102.     }
  103.    
  104.     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  105.         let cell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier) as! EventCell
  106.         cell.setup(self.viewModel.events[indexPath.row])
  107.         return cell
  108.     }
  109. }
  110.  
  111. extension CalendarViewController: UITableViewDelegate {
  112.     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  113.         tableView.deselectRow(at: indexPath, animated: true)
  114.         let vm = self.viewModel.events[indexPath.row]
  115.         let vc = NewsDetailsViewController(eventVM: vm)
  116.         vc.hidesBottomBarWhenPushed = true
  117.         self.navigationController?.pushViewController(vc, animated: true)
  118.     }
  119. }
  120.  
  121. extension CalendarViewController: VAMonthViewAppearanceDelegate {
  122.    
  123.     func leftInset() -> CGFloat {
  124.         return 10.0
  125.     }
  126.    
  127.     func rightInset() -> CGFloat {
  128.         return 10.0
  129.     }
  130.    
  131.     func verticalMonthTitleFont() -> UIFont {
  132.         return UIFont.systemFont(ofSize: 16, weight: .semibold)
  133.     }
  134.    
  135.     func verticalMonthTitleColor() -> UIColor {
  136.         return .black
  137.     }
  138.    
  139.     func verticalCurrentMonthTitleColor() -> UIColor {
  140.         return .red
  141.     }
  142.    
  143. }
  144.  
  145. extension CalendarViewController: VADayViewAppearanceDelegate {
  146.    
  147.     func textColor(for state: VADayState) -> UIColor {
  148.         switch state {
  149.         case .out:
  150.             return UIColor(red: 214 / 255, green: 214 / 255, blue: 219 / 255, alpha: 1.0)
  151.         case .selected:
  152.             return .white
  153.         case .unavailable:
  154.             return .lightGray
  155.         default:
  156.             return .black
  157.         }
  158.     }
  159.    
  160.     func textBackgroundColor(for state: VADayState) -> UIColor {
  161.         switch state {
  162.         case .selected:
  163.             return .red
  164.         default:
  165.             return .clear
  166.         }
  167.     }
  168.    
  169.     func shape() -> VADayShape {
  170.         return .circle
  171.     }
  172.    
  173.     func dotBottomVerticalOffset(for state: VADayState) -> CGFloat {
  174.         switch state {
  175.         case .selected:
  176.             return 2
  177.         default:
  178.             return -7
  179.         }
  180.     }
  181.    
  182. }
  183.  
  184. extension CalendarViewController: VACalendarViewDelegate {
  185.    
  186.     func selectedDate(_ date: Date) {
  187.         self.navigationController?.pushViewController(CalendarDetailsViewController(events: self.selectedEvents(date)), animated: true)
  188.         self.calendarView.selectDates([Date()])
  189.     }
  190.    
  191.    
  192.     private func selectedEvents(_ date: Date) -> [EventCellVM] {
  193.        
  194.        
  195.         return self.viewModel.events.filter {
  196.             return date.compare(Date(timeIntervalSince1970: $0.model.startDate))
  197.         }
  198.     }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement