// // FSCalendarScopeExampleViewController.m // FSCalendar // // Created by Wenchao Ding on 8/29/15. // Copyright (c) 2015 Wenchao Ding. All rights reserved. // #import "FSCalendarScopeExampleViewController.h" @implementation FSCalendarScopeExampleViewController #pragma mark - Life cycle - (void)viewDidLoad { [super viewDidLoad]; self.dateFormatter = [[NSDateFormatter alloc] init]; self.dateFormatter.dateFormat = @"yyyy/MM/dd"; [_calendar selectDate:[NSDate date]]; UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self.calendar action:@selector(handleScopeGesture:)]; panGesture.delegate = self; panGesture.minimumNumberOfTouches = 1; panGesture.maximumNumberOfTouches = 2; [self.view addGestureRecognizer:panGesture]; self.scopeGesture = panGesture; // While the scope gesture begin, the tableView gesture cancel. [self.tableView.panGestureRecognizer requireGestureRecognizerToFail:panGesture]; // Uncomment this to perform an 'initial-week-scope' _calendar.scope = FSCalendarScopeWeek; } - (void)dealloc { NSLog(@"%s",__FUNCTION__); } #pragma mark - UIGestureRecognizerDelegate // Whether scope gesture should begin - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { BOOL shouldBegin = self.tableView.contentOffset.y <= -self.tableView.contentInset.top; if (shouldBegin) { CGPoint velocity = [self.scopeGesture velocityInView:self.view]; switch (self.calendar.scope) { case FSCalendarScopeMonth: return velocity.y < 0; case FSCalendarScopeWeek: return velocity.y > 0; } } return shouldBegin; } - (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated { _calendarHeightConstraint.constant = CGRectGetHeight(bounds); [self.view layoutIfNeeded]; } - (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition { NSLog(@"did select date %@",[self.dateFormatter stringFromDate:date]); NSMutableArray *selectedDates = [NSMutableArray arrayWithCapacity:calendar.selectedDates.count]; [calendar.selectedDates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [selectedDates addObject:[self.dateFormatter stringFromDate:obj]]; }]; NSLog(@"selected dates is %@",selectedDates); if (monthPosition == FSCalendarMonthPositionNext || monthPosition == FSCalendarMonthPositionPrevious) { [calendar setCurrentPage:date animated:YES]; } } - (void)calendarCurrentPageDidChange:(FSCalendar *)calendar { NSLog(@"%s %@", __FUNCTION__, [self.dateFormatter stringFromDate:calendar.currentPage]); } #pragma mark - - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger numbers[2] = {2,20}; return numbers[section]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 0) { NSString *identifier = @[@"cell_month",@"cell_week"][indexPath.row]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; return cell; } else { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; return cell; } } #pragma mark - - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; if (indexPath.section == 0) { FSCalendarScope selectedScope = indexPath.row == 0 ? FSCalendarScopeMonth : FSCalendarScopeWeek; [self.calendar setScope:selectedScope animated:self.animationSwitch.on]; } } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 20; } - (IBAction)toggleClicked:(id)sender { if (self.calendar.scope == FSCalendarScopeMonth) { [self.calendar setScope:FSCalendarScopeWeek animated:_animationSwitch.on]; } else { [self.calendar setScope:FSCalendarScopeMonth animated:_animationSwitch.on]; } } @end