thieumao

ScheduleViewController

Nov 28th, 2016
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 6.25 KB | None | 0 0
  1. import UIKit
  2.  
  3. class ScheduleViewController: BaseViewController {
  4.    
  5.     @IBOutlet weak var pageContentView: UIView!
  6.     @IBOutlet weak var currentDateLabel: UILabel!
  7.    
  8.     private var pageViewController: UIPageViewController?
  9.     var allSchedules = [[String: Any]]()
  10.  
  11.     override func viewDidLoad() {
  12.         super.viewDidLoad()
  13.         self.navigationTitle = "SCHEDULE"
  14.         initDailySchedulePageView()
  15.     }
  16.  
  17.     override func didReceiveMemoryWarning() {
  18.         super.didReceiveMemoryWarning()
  19.         // Dispose of any resources that can be recreated.
  20.     }
  21.    
  22.     func initDailySchedulePageView() {
  23.         //setup pageview
  24.         self.pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: [UIPageViewControllerOptionInterPageSpacingKey: 20])
  25.        
  26.         self.pageViewController?.delegate = self
  27.         self.pageViewController?.dataSource = self
  28.         self.pageViewController?.automaticallyAdjustsScrollViewInsets = false;
  29.        
  30.         self.addChildViewController(self.pageViewController!)
  31.         self.pageViewController?.didMove(toParentViewController: self)
  32.         self.pageContentView.addSubview(self.pageViewController!.view)
  33.         self.pageViewController?.view.frame = CGRect(x: 0, y: 0, width: pageContentView.frame.size.width, height: pageContentView.frame.size.height)
  34.         self.pageViewController?.view.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleTopMargin, .flexibleLeftMargin, .flexibleRightMargin, .flexibleBottomMargin]
  35.        
  36.         for i in 0..<10 {
  37.             let schedules = [
  38.                 "date": "2016/11/" + String(21 + i),
  39.                 "schedule": [
  40.                     ScheduleTime(startTime: 10, endTime: 11),
  41.                     ScheduleTime(startTime: 13, endTime: 14),
  42.                     ScheduleTime(startTime: 13.5, endTime: 14.5),
  43.                     ScheduleTime(startTime: 13.5, endTime: 14.5),
  44.                     ScheduleTime(startTime: 13.5, endTime: 14.5),
  45.                     ScheduleTime(startTime: 12.5, endTime: 15.5)
  46.                     //            ScheduleTime(startTime: 10.5, endTime: 17.5)
  47.                 ]
  48.             ] as [String : Any]
  49.             allSchedules.append(schedules)
  50.         }
  51.        
  52.         gotoPage(0)
  53.     }
  54.    
  55.     func gotoPage(_ page: Int, animated: Bool = false) {
  56.         if page >= 0 && page < allSchedules.count {
  57.             let schedules = allSchedules[page]
  58.             if let dateString = schedules["date"] as? String {
  59.                 self.currentDateLabel.text = dateString
  60.             }
  61.             if let scheduleTimes = schedules["schedule"] as? [ScheduleTime] {
  62.                 let viewController = DailyScheduleViewController(withSchedules: scheduleTimes)
  63.                 viewController.pageIndex = page
  64.                 self.pageViewController?.setViewControllers([viewController], direction: .forward, animated: animated, completion: nil)
  65.             }
  66.         }
  67.     }
  68.    
  69.     func getPage(_ page: Int) -> DailyScheduleViewController? {
  70.         if page >= 0 && page < allSchedules.count {
  71.             let schedules = allSchedules[page]
  72.             if let scheduleTimes = schedules["schedule"] as? [ScheduleTime] {
  73.                 let viewController = DailyScheduleViewController(withSchedules: scheduleTimes)
  74.                 viewController.pageIndex = page
  75.                 return viewController
  76.             }
  77.         }
  78.         return nil
  79.     }
  80.    
  81.     @IBAction func onPreviousDayClicked(_ sender: Any) {
  82.         if let controllers = self.pageViewController?.viewControllers {
  83.             if controllers.count > 0 {
  84.                 if let dailyController = controllers[0] as? DailyScheduleViewController {
  85.                     let pageIndex = dailyController.pageIndex
  86.                     if pageIndex > 0 {
  87.                         gotoPage(pageIndex - 1, animated: true)
  88.                     }
  89.                 }
  90.             }
  91.         }
  92.     }
  93.    
  94.     @IBAction func onNextDayClicked(_ sender: Any) {
  95.         if let controllers = self.pageViewController?.viewControllers {
  96.             if controllers.count > 0 {
  97.                 if let dailyController = controllers[0] as? DailyScheduleViewController {
  98.                     let pageIndex = dailyController.pageIndex
  99.                     if pageIndex < allSchedules.count - 1 {
  100.                         gotoPage(pageIndex + 1, animated: true)
  101.                     }
  102.                 }
  103.             }
  104.         }
  105.     }
  106.  
  107. }
  108.  
  109. extension ScheduleViewController: UIPageViewControllerDelegate, UIPageViewControllerDataSource {
  110.     func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
  111.         if let currentPageController = viewController as? DailyScheduleViewController {
  112.             let pageIndex = currentPageController.pageIndex
  113.             if pageIndex > 0 {
  114.                 return getPage(pageIndex - 1)
  115.             }
  116.         }
  117.         return nil
  118.     }
  119.    
  120.     func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
  121.         if let currentPageController = viewController as? DailyScheduleViewController {
  122.             let pageIndex = currentPageController.pageIndex
  123.             if pageIndex < allSchedules.count - 1 {
  124.                 return getPage(pageIndex + 1)
  125.             }
  126.         }
  127.         return nil
  128.     }
  129.    
  130.     func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
  131.         if let controllers = pageViewController.viewControllers {
  132.             if controllers.count > 0 {
  133.                 if let dailyController = controllers[0] as? DailyScheduleViewController {
  134.                     let page = dailyController.pageIndex
  135.                     if page >= 0 && page < allSchedules.count {
  136.                         let schedules = allSchedules[page]
  137.                         if let dateString = schedules["date"] as? String {
  138.                             self.currentDateLabel.text = dateString
  139.                         }
  140.                     }
  141.                 }
  142.             }
  143.         }
  144.     }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment